for循环中的fork()执行 int main(int argc,char**argv){ int i=0; 而(i
有人能告诉我ps命令执行了多少次并给出解释吗?我相信答案是6 在第一次迭代中,调用for循环中的fork()执行 int main(int argc,char**argv){ int i=0; 而(i,c,linux,fork,C,Linux,Fork,有人能告诉我ps命令执行了多少次并给出解释吗?我相信答案是6 在第一次迭代中,调用fork(),将进程分成2个部分,从而调用ps两次 在第二次迭代中,在每个进程中再次调用fork,因此现在有4个进程运行ps 打给ps的电话总数:2+4=6。我相信答案是6 int main(int argc, char** argv) { int i = 0; while (i < 2) { fork(); system("ps -o pid,ppid,com
fork()
,将进程分成2个部分,从而调用ps两次
在第二次迭代中,在每个进程中再次调用fork,因此现在有4个进程运行ps
打给ps的电话总数:2+4=6。我相信答案是6
int main(int argc, char** argv) {
int i = 0;
while (i < 2) {
fork();
system("ps -o pid,ppid,comm,stat");
i++;
}
return (EXIT_SUCCESS);
}
在第一次迭代中,调用fork()
,将进程分成2个部分,从而调用ps两次
在第二次迭代中,在每个进程中再次调用fork,因此现在有4个进程运行ps
对ps的呼叫总数:2+4=6
int main(int argc, char** argv) {
int i = 0;
while (i < 2) {
fork();
system("ps -o pid,ppid,comm,stat");
i++;
}
return (EXIT_SUCCESS);
}
我计算6,初始进程和第一个分叉(4)各有2个,当这两个进程的I==1时,分叉的每个进程各有一个
当然,这是假设您修复了缺少的端部支撑(并定义了EXIT_SUCCESS),否则没有,因为它不会编译。:-)
我计算6,初始进程和第一个分叉(4)各有2个,当这两个进程的I==1时,分叉的每个进程各有一个
当然,这是假设您修复了缺少的端部支撑(并定义了EXIT_SUCCESS),否则没有,因为它不会编译。:-) 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
A做两次(i=0)
B做两次(i=0)
C做一次(i=1)
D做一次(i=1)
注意,我使用字母是为了区分它们。没有可预测的输出顺序,因为进程切换在程序员眼中是不确定的。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
A做两次(i=0)
B做两次(i=0)
C做一次(i=1)
D做一次(i=1)
注意,我使用字母是为了区分它们。没有可预测的输出顺序,因为在程序员眼里,进程切换是不确定的。运行它并找出答案?是的,我只是想有人解释我得到了6--这不是个糟糕的问题,OP一开始可能对奇怪的答案感到困惑,Fork没那么容易掌握。运行它并找出答案?是的,我只是想有人给我解释我得到了6--这不是一个坏问题,OP一开始可能会被奇怪的答案弄糊涂,Fork没那么容易掌握。很好发现。我希望OP在作业中取得好成绩;-)好的。我希望OP在作业中取得好成绩;-)