【问题标题】:fork() in operating system操作系统中的 fork()
【发布时间】:2013-10-15 02:37:39
【问题描述】:

在操作系统的概念中,我们总是说在 fork() 执行中,子和父有自己的堆和堆栈副本,但它们共享内存段。我的问题是,当我们说共享内存段时,这是否意味着他们将要执行的文本或代码?

【问题讨论】:

    标签: operating-system fork


    【解决方案1】:

    是的(至少在 Linux 上会发生这种情况)。根据fork 的 Linux 手册页(如果您没有任何 Linux,您可以通过在控制台中输入 man 2 fork 或输入 here 来观看):

    fork() 通过复制调用进程来创建一个新进程。这 新进程,称为子进程,是 调用进程,简称父进程,以下除外 分:

    • 父子进程 ID 是唯一的
    • 子进程的父进程 ID 与父进程的父进程 ID 相同
    • 内存锁、信号量、信号等不被继承
    • ...

    【讨论】:

    • 谢谢,共享内存段是指文本还是代码?
    • 共享内存段是用于在进程之间共享数据的段,而不是可执行代码。代码只能通过分叉或使用轻量级进程(又名线程)来共享(在内存中)。 Wikipedia可以给你一个我能做到的最佳答案。
    【解决方案2】:

    除了上面提供的答案。

    fork() 系统调用创建一个进程,该进程成为它正在分叉的父进程的副本。相同的可执行文件。

    这里提供的例子清楚地解释了这个概念。here

    但是,我们可能希望执行具有不同存在的新进程。为此,我们需要 exec() 系统调用。

    Exec() 系统调用从现有的可执行文件创建一个新进程。所以使用exec()可以解决新进程重复执行的问题。

    这里解释了各种类型的 Exec() 调用。Exec()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 2016-10-03
      • 2018-07-29
      • 2017-01-23
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多