根据我正在阅读的教科书,下面的代码创建了 N 个子进程,它们将以独特的状态退出。
/* Parent creates N children */
for (i = 0; i < N; i++)
if ((pid[i] = Fork()) == 0) /* Child */
exit(100+i);
在教科书的前面,它指出以下代码将有 8 行输出:
int main(){
Fork();
Fork();
Fork();
printf("hello\n");
exit(0);
}
这让我相信有 2^n 个子进程,其中 n 是调用 fork() 的次数。第一个代码只产生 N 个子进程(而不是 2^N)的原因是因为子进程每次都退出,所以在调用后续的 fork() 时,它只在父进程上运行?
最佳答案
每次成功调用 fork()
都会创建一个新进程。
在第一个例子中,子进程(fork()
的返回值为0
)调用exit();
,这意味着他们不会调用下一个 fork()
。
在第二个例子中,每个子进程都继续 fork 。
关于C: fork() 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820243/