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命令
谁能告诉我?fork()的执行for循环
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命令
谁能告诉我?fork()的执行for循环
我相信答案是6
在第一次迭代,fork()
被调用时,分裂过程中2,从而调用PS的两倍。
在第二次迭代中,在每个进程中再次调用fork,所以现在有4个进程运行ps。
总共调用ps:2 + 4 = 6。
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
余数6,每次2从最初的进程和第一叉(4),以及一个从每个过程分叉当我== 1从这些2个进程。
当然,这是假设你修复了缺失的末端大括号(并定义了EXIT_SUCCESS),否则没有,因为它不会编译。 :-)
6次。
它创建了一个流程树是这样的:
A-+
|-B-+
| |-C-+
|-D
甲做它的两倍(I = 0)
B则两次(I = 0)
Ç做一次( I = 1)
d做一次(I = 1)
注意,我的信件用法是区分它们。没有可预测的输出顺序,因为过程切换对于程序员来说是不确定的。
斑点。我希望OP能在他的任务中取得好成绩;-) – jond3k
运行它并找出? –
是的,我只是想要有人解释我即时获得6 -_- – Leanne
它没有那么糟糕的一个问题, OP可能一开始就困惑于奇怪的答案, 叉是不容易掌握。 – nikhil