【问题标题】:Understanding the fork system call in UNIX了解 UNIX 中的 fork 系统调用
【发布时间】:2014-08-25 00:05:54
【问题描述】:

我试图了解之前给我的一行代码的执行顺序以及使用fork() 系统调用创建的进程。它是用 C 语言编写的,可以在 UNIX 上运行。

我了解fork()背后的主要概念,但是,我想了解源自以下代码行的进程树创建:

x = fork() || !fork();

任何帮助将不胜感激!

【问题讨论】:

  • 你知道fork() 会返回什么吗?你知道短路评估吗?将它们加在一起,您应该最终得到 3 个进程...

标签: c linux unix process fork


【解决方案1】:

运行代码的初始父进程(假设它是PID = 1000),执行x = fork() 部分,并产生一个新的子进程(假设是PID = 1001)。

对于进程PID = 1000,到目前为止逻辑表达式的值不是零,因为fork(2) 返回其子进程的pid。因此,由于short circuit evaluation,逻辑表达式的其余部分没有被计算,因为它不需要。

对于进程PID = 1001,到目前为止逻辑表达式的值为0,因为在创建新进程的情况下,fork(2)返回0;所以它也必须评估逻辑表达式的其余部分。它执行!fork() 部分,生成一个新进程(比如说PID = 1002)。

派生的进程树如下:

       1000
        |
        |
       1001
        |
        |
       1002

【讨论】:

    【解决方案2】:

    chrk's answer很好,另外fork()返回2次,一个是父进程中子进程的pid,另一个是子进程返回0。在fork() 返回后,这两个进程都会继续处理。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2015-02-21
      • 2012-02-10
      • 2012-02-02
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多