首页 > 解决方案 > 如何正确计算 fork 创建的进程?

问题描述

我在使用 C 代码时遇到问题,这些 C 代码是用我们的教授给出的 fork 创建的进程来计算它创建的进程数。

pid1 = fork();

if (pid1 != 0) {
   pid2 = fork();
   pid3 = fork();
}
else {
   pid4 = fork(); 
}

标签: cfork

解决方案


运行代码只是有点帮助(并且不能在考试期间完成!)——最好画一个流程树。规则是每个子进程在fork产生它的调用之后开始执行,父进程非零pid,子进程的 apid为零。

         main
       /   |   \
    pid1 pid2 pid3
     /     |
  pid4   pid3

我们可以看到main产生了三个孩子,pid1pid2(pid3pid1微不足道的,另外两个在真正的if块中产生)。pid1继续到else条件部分并pid4在完成之前产生。pid2是唯一的技巧:它会再次生成,pid3因为那是它的执行开始的地方。

回答:

总共创建了 6 个进程(main和 5 个子进程)


推荐阅读