0

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

4

2 回答 2

1

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

fork() 通过复制调用进程来创建一个新进程。新进程(称为子进程)与调用进程(称为父进程)完全相同,但以下几点除外:

  • 进程 ID 对于父母和孩子来说是唯一的
  • 子进程的父进程 ID 与父进程的父进程 ID 相同
  • 内存锁、信号量、信号等不被继承
  • ...
于 2013-10-15T02:46:45.673 回答
1

除了上面提供的答案。

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

此处提供的示例清楚地解释了这个概念。这里

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

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

此处解释了各种类型的 Exec() 调用。执行()

于 2017-04-25T14:08:12.590 回答