Operating system 操作系统中的fork()

Operating system 操作系统中的fork(),operating-system,fork,Operating System,Fork,在操作系统的概念中,我们总是说在fork()执行中,子级和父级有自己的堆和堆栈副本,但它们共享内存段。我的问题是,当我们说共享内存段时,这是否意味着它们将要执行的文本或代码?对(至少在Linux上是这样)。根据fork的Linux手册页(您可以通过在控制台中键入man 2 fork或输入(如果您没有任何Linux)来观看): fork()通过复制调用进程来创建新进程。这个 新流程称为子流程,它与 调用进程,称为父进程,以下情况除外 要点: 进程ID对于父级和子级是唯一的 子进程的父进程ID与父

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

对(至少在Linux上是这样)。根据
fork
的Linux手册页(您可以通过在控制台中键入
man 2 fork
或输入(如果您没有任何Linux)来观看):

fork()通过复制调用进程来创建新进程。这个 新流程称为子流程,它与 调用进程,称为父进程,以下情况除外 要点:

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

除了上面提供的答案之外

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

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

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

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


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

谢谢,共享内存段指的是文本或代码?共享内存段是用于在进程之间共享数据的段,而不是可执行代码。代码只能通过分叉或使用轻量级进程(也称为线程)共享(内存中)。我能给你一个我能做的最好的答案。