我真的不明白fork()是如何工作的。我用一个fork来理解示例,但是当我有多个调用时,我没有。我有一个这样的例子,它打印4行你好,如何创建了很多流程?
int main(void)
{
fork();
fork();
printf("hello\n");
return 0;
}
答案 0 :(得分:10)
在fork()
调用之后,两个进程(原始进程和衍生进程)继续从下一行代码执行。因此,两个进程都执行第二个fork()
指令,因此最终您有 4 进程。因此,您会看到4个"hello"
行打印的实例。
一张图片胜过千言万语:
答案 1 :(得分:3)
fork()
系统调用基本上创建了一个"克隆"执行它的过程。两个"克隆"运行几乎相同(除了fork()
的返回值)。
对fork()的第一次调用由一个进程执行(让我们调用一个" P"),这将创建第二个进程" C"。现在有两个进程,它们都在main()函数中执行第二行。所以两个进程P和C都会创建一个新进程。这就是为什么你最终总共有4个进程,所有进程都打印出#34;你好"一次。
以下示例可能会使该行为更清晰:
int main() { printf("process %d: start\n", getpid()); int r1 = fork(); printf("process %d: first fork() returned %d\n", getpid(), r1); int r2 = fork(); printf("process %d: second fork() returned %d\n", getpid(), r2); }
在我的系统上,它输出以下内容:
process 12953: start process 12953: first fork() returned 12954 process 12954: first fork() returned 0 process 12953: second fork() returned 12955 process 12955: second fork() returned 0 process 12954: second fork() returned 12956 process 12956: second fork() returned 0