如何解决分叉多少流程造成混乱
说我有以下程序
pid_t pid = fork(); // fork #1
pid = fork(); // fork #2
现在我们有了:
- 叉子1创建了一个附加的过程。所以现在我们有两个 流程。
- 叉#2由两个过程执行,创建两个 流程,总共四个。
我的困惑是在第一次分叉之后,我们将有两个进程P1(父进程)和C1(子进程)。每个进程将执行一次第二个fork。所以我们不应该有6个进程,因为P1将创建两个以上的进程,而C1也将创建两个进程吗?还是只有P1可以执行第二个派生创建P2 C2
解决方法
一个好的通用规则是,一个进程调用fork
,但是有两个从中返回(当然,假设它可以工作)。
从fork
返回后,两个返回进程都继续执行 。我怀疑您可能由于困惑而无法完全理解这一点。
这意味着您在第一个分支中从一个进程转到两个进程,然后这些进程的每个再次调用fork
,因此进程计数加倍,然后再加倍(1-> 4 )。基本上:
1 -> fork#1 -+-> 1 -> fork#2 -+-> 1
| |
| +-> 3
|
+-> 2 -> fork#2 -+-> 2
|
+-> 4
,
C1不会执行两次分叉,只会执行一次。 P1将执行两次,这将导致C1和C2。 C1将仅执行第二个派生。 最终结果是4个过程。 这是一个可视化: P1-> C2第二个前叉 |第一 V叉 C1-> C3子进程的第二个分叉
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。