c - 嵌套fork()——如何统计进程数
问题描述
我对 Fork() 的这个例子感到困惑
int main(){
if (fork()){
if (!fork())
fork();
}
fork();
printif("1 ");
}
我数了数,会是 12 个重复的(会有多少进程!!!)
解决方案
让他们数一数:
int main(){
if (fork()){ // 1
if (!fork()) // 2
fork(); // 3
}
fork(); // 4
printif("1 ");
}
当您运行该程序时,您将拥有第一个进程,它将成为所有其他进程的祖先。
fork_1
将创建一个子进程,后者将有 0 作为返回值。所以它会在 if 语句之后继续,然后运行fork_4
,因此创建了另一个孩子。
printf
现在运行两次 (2)。
让我们继续第一个获得非空值的进程,它运行fork_2
然后获得非空返回值。它在第二个 if 语句之后继续运行fork_4
。将有两个进程(祖先及其子进程)=> 另外两个printf
。
中创建的子进程fork_2
会得到一个空返回值,所以if条件为真。它运行fork_3
提供两个进程,每个进程都运行fork_4
。因此 printf 将运行四 (4) 次。
最后, printf 运行 8 次。所以你会得到八个1
打印。
推荐阅读
- alfresco - Alfresco share dashlet:如何为所有用户设置唯一的 componentId
- git - 如何在不重复避免变基的情况下挑选提交?
- c# - 如何在 JSON 中创建数组?
- google-api - 无法从 App Center 连接到 Google Play 以分发 App
- c++ - C ++通过结构数组搜索值
- firebase - Firebase 云功能最佳实践?
- javascript - 为什么在弗雷德弗林斯顿之后警报显示未定义?ES6 中的“const”有哪些属性?
- machine-learning - 不平衡数据集的标记化
- css - 在 body 旁边放一个元素
- reactjs - 找不到 react-redux 上下文值;请确保组件被包裹在一个