for循环中的fork()执行

时间:2011-08-21 13:14:22

标签: c linux fork

int main(int argc, char** argv) {
    int i = 0;
    while (i < 2) {
        fork();
        system("ps -o pid,ppid,comm,stat");
        i++;
     }
     return (EXIT_SUCCESS);
}

有人能告诉我ps命令执行了多少次?

3 个答案:

答案 0 :(得分:6)

我相信答案是6。

在第一次迭代中,调用fork(),将进程拆分为2,从而调用ps两次。

在第二次迭代中,在每个进程中再次调用fork,因此现在有4个进程运行ps。

对ps的总调用:2 + 4 = 6.

答案 1 :(得分:4)

6次。

它创建一个这样的进程树:

A-+
  |-B-+
  |   |-C-+
  |-D

A做了两次(i = 0)

B做两次(i = 0)

C做一次(i = 1)

D做一次(i = 1)

请注意,我对字母的使用是为了区分它们。没有可预测的输出排序,因为过程切换对于程序员来说是不确定的。

答案 2 :(得分:1)

Initial Process
i == 0
-> Fork 1
   system call
   i == 1
   -> Fork 1.1
      system call
   system call
system call
i == 1
-> Fork 2
   system call
system call

我从初始进程和第一个fork(4)中分别计算6个,每个进程一个,当i == 1从这两个进程分叉时。

当然,假设您修复了缺少的结束括号(并定义了EXIT_SUCCESS),否则没有,因为它不会编译。 : - )