【问题标题】:Fork() Command in Linux C codingLinux C 编码中的 Fork() 命令
【发布时间】:2017-02-20 15:42:47
【问题描述】:

我很难理解使用 fork() 命令最终会产生多少进程。如果我从变量 pid_t pid 开始;和调用 fork() 我将有一个孩子和一个父进程。

现在如果我在第一个 fork() 之后立即调用 fork 会怎样。我知道有 3 个或 4 个进程吗?就像这个叉子是同时调用父母和孩子,还是只是孩子?那么子进程 fork() 是否是另一个子进程,因此创建了 3 个进程?还是对父子进程都调用了 fork,所以现在父进程将有一个子进程,该子进程有自己的子进程,而父进程现在有第二个子进程?

如果再次调用 fork 第三次,所有 3 或 4 个进程都会得到子进程吗?只有最新的孩子?

根据 fork() 的工作原理,当您调用 fork() 3 次时会创建多少个进程?我被困在 4,6 或 8 之间。

Here is the Linux C coding. How many processes will run when this program iis executed, including itself. Every process must terminate using the return(0)

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 请以 code 形式发布代码,而不是图片。
  • 所以将代码作为图像发布比遵循网站规则并通过简单的复制/粘贴将其发布为文本更容易??
  • 请注意,fork() 是函数或系统调用,而不是命令。

标签: c linux process fork child-process


【解决方案1】:

当你调用fork()时,进程被复制,父子进程都继续执行程序中的所有代码。如果你想让他们采取不同的行动,你需要检查返回值——它在子节点中返回0,在父节点中返回子节点的PID。如果您没有任何以此为条件的代码,它们将执行相同的所有操作。因此,如果它再次调用fork(),这将同时发生在父进程和子进程中,您最终会得到 4 个进程:原始父进程、两个子进程和一个孙子进程。第三个fork() 产生8 个进程。

【讨论】:

  • 谢谢,我在意识到父母和孩子每次都得到一个新进程后才想通。
【解决方案2】:

我相信它是 8,每个 fork() 是否只会使进程数量增加一倍,因为没有 if 语句指定只有父/子进行分叉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多