2011-08-21 152 views
1
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循环

+7

运行它并找出? –

+0

是的,我只是想要有人解释我即时获得6 -_- – Leanne

+1

它没有那么糟糕的一个问题, OP可能一开始就困惑于奇怪的答案, 叉是不容易掌握。 – nikhil

回答

6

我相信答案是6

在第一次迭代

fork()被调用时,分裂过程中2,从而调用PS的两倍。

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

总共调用ps:2 + 4 = 6。

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 

余数6,每次2从最初的进程和第一叉(4),以及一个从每个过程分叉当我== 1从这些2个进程。

当然,这是假设你修复了缺失的末端大括号(并定义了EXIT_SUCCESS),否则没有,因为它不会编译。 :-)

4

6次。

它创建了一个流程树是这样的:

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

甲做它的两倍(I = 0)

B则两次(I = 0)

Ç做一次( I = 1)

d做一次(I = 1)

注意,我的信件用法是区分它们。没有可预测的输出顺序,因为过程切换对于程序员来说是不确定的。

+0

斑点。我希望OP能在他的任务中取得好成绩;-) – jond3k