pid_t pid;
pid = fork();
if (pid == 0) {
fork();
}
if (pid > 0) {
fork(); fork();
}
fork();
我是新来的叉子。我发现很难找到创建过程的数量以及如何绘制图表。任何人都可以有任何提示,让我学习这一点。非常感谢你。学习fork过程和图的任何提示?
此外,fork()> 0 与pid> 0的含义是什么?
pid_t pid;
pid = fork();
if (pid == 0) {
fork();
}
if (pid > 0) {
fork(); fork();
}
fork();
我是新来的叉子。我发现很难找到创建过程的数量以及如何绘制图表。任何人都可以有任何提示,让我学习这一点。非常感谢你。学习fork过程和图的任何提示?
此外,fork()> 0 与pid> 0的含义是什么?
没有太多的东西,你只需要明白fork(2)
返回两次:在父母和新生儿。在父项中,它返回新子项的进程ID;在孩子中它返回0.在极少数情况下,它会返回-1,并且不会创建新进程 - 您可能想要在生产级代码中执行错误处理。
只要记住这一点,然后按照代码。
在这个例子中,我们假设fork(2)
总是成功。第一fork()
发生在这里:
pid = fork();
这条线后,有2个进程运行:其中之一的值为0 pid
,其他有一些其他的非零,正值。
然后我们有这样的:
if (pid == 0) {
fork();
}
只有以前fork()
的孩子将有pid == 0
,因此只有过程叉再次之一。
在if
之后,我们总共运行了3个进程:一个存储在pid
中的正值,另外两个存储在pid
中。
现在有这样的:
if (pid > 0) {
fork(); fork();
}
的if
只输入在过程中的一个。在if
的内部,该过程分叉两次。然后在第一个fork()
中创建的孩子再次分叉,因此在if
的末尾,我们总共运行了6个进程。
最后:
fork();
在这一点上,我们有6个进程运行时,所有的人都会再次分叉,所以我们结束了12道工序。