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命令执行了多少次?
答案 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),否则没有,因为它不会编译。 : - )