for循环中的fork()执行 int main(int argc,char**argv){ int i=0; 而(i

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

有人能告诉我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,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在作业中取得好成绩;-)