2017-02-24 98 views
0
#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
int main() { 
     pid_t pid; 
     pid = fork(); // #1 
     if (pid == 0) { 
       if(fork() > 0) // #2 
         fork(); // #3 
     } else 
       fork(); // #4 
     return 0; 
} 

我真的很困惑#4,因为我不知道程序是否会运行这个else语句。 你们知道最后的进程总数是多少?unix中fork()的进程总数是多少?

在这里,还有另一个程序。再次,过程的总数是多少?谢谢!

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
int main() { 
     for (int i = 0; i < 10; i++) 
       if (fork()) { 
         fork(); 
         fork(); 
       } else 
         fork(); 
     return 0; 
} 

回答

0

你会发现你在fork(2)手册需要什么,特别是

成功时,子进程的PID在父返回, 和0的孩子返回。

在调用fork时,我们有一个进程正在调用,但有两个进程返回:父进程和新进程的子进程。他们将执行所有代码后叉。 该过程将根据返回值知道它是否是孩子或父母(并可以区分其操作)。

知道在C语言中,所有非零值都是真的,可以知道在其他情况下是否执行#4以及谁执行#4:它将是孩子,实际上是产生一个大孩子。

这听起来像是作业,所以我会把计数留给你。

有多个答案,取决于我们正在考虑fork失败的可能性(返回码-1)。对于给定的代码,我假设你可以忽略它。