有人可以解释 fork 是如何工作的吗?
Could someone explain how fork works?
我真的不明白 fork() works.I 如何理解一个 fork 的例子,但是当有多个调用时我没有't.I 有这样的例子并打印出来4行hello,创建了多少进程?
int main(void)
{
fork();
fork();
printf("hello\n");
return 0;
}
在 fork()
调用后,两个进程(原始进程和派生进程)从下一行代码继续执行。所以两个进程都执行第二条 fork()
指令,所以最后你有 4 个进程。因此,您会看到打印了 4 个 "hello"
行。
一图胜千言:
fork()
系统调用实质上创建了执行它的进程的 "clone"。 "clones" 运行 几乎相同(除了 fork()
的 return 值)。
对 fork() 的第一次调用由一个进程执行(我们称之为 "P"),它创建第二个进程 "C"。现在有两个进程,它们都执行 main() 函数中的第二行。所以两个进程,P和C,都创建了一个新进程。这就是为什么你最终得到总共 4 个进程,所有进程都只打印一次 "hello"。
以下示例可能会使该行为更加清晰:
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
我真的不明白 fork() works.I 如何理解一个 fork 的例子,但是当有多个调用时我没有't.I 有这样的例子并打印出来4行hello,创建了多少进程?
int main(void)
{
fork();
fork();
printf("hello\n");
return 0;
}
在 fork()
调用后,两个进程(原始进程和派生进程)从下一行代码继续执行。所以两个进程都执行第二条 fork()
指令,所以最后你有 4 个进程。因此,您会看到打印了 4 个 "hello"
行。
一图胜千言:
fork()
系统调用实质上创建了执行它的进程的 "clone"。 "clones" 运行 几乎相同(除了 fork()
的 return 值)。
对 fork() 的第一次调用由一个进程执行(我们称之为 "P"),它创建第二个进程 "C"。现在有两个进程,它们都执行 main() 函数中的第二行。所以两个进程,P和C,都创建了一个新进程。这就是为什么你最终得到总共 4 个进程,所有进程都只打印一次 "hello"。
以下示例可能会使该行为更加清晰:
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