创建了父进程的副本。但无法理解为什么在程序printf
以下执行 8 次。我也阅读了Working of fork() in linux链接。
#include <stdio.h>
int main()
{
fork();
fork();
fork();
printf("process\n");
}
答案 0 :(得分:3)
Fork就像二叉树一样工作。因此,对于每x个fork调用,它总是有2 ^ x个进程数。
让我们了解你的例子。
第一个fork()调用:
调用第一个fork()
时。父进程创建一个新进程。所以我们有2个
线程。
第二次fork()调用:
此时我们有两个进程(主进程和一个新创建的进程)。这两个线程将分别调用第二个fork并分别创建2个新进程。所以我们有4个帖子。
你现在可能已经有了这个想法。每次遇到fork()时,所有进程都会创建各自的子进程(自己加倍)。
答案 1 :(得分:3)
一般情况下,n
forks
以这种方式执行下一个语句(在本例中为printf
)2^n
次。
方法如下:
|
+-fork()----------------------------------+
| |
+-fork()-------------+ +-fork()-------------+
| | | |
+-fork()---+ +-fork()---+ +-fork()---+ +-fork()---+
| | | | | | | |
print() print() print() print() print() print() print() print()