C 创建了多少个进程
我想知道在这段代码中有多少个进程是从fork()创建的,我做了一些跟踪,最后有20个进程,但我不能确定,你能帮我吗。 多谢各位C 创建了多少个进程,c,linux,ubuntu,fork,C,Linux,Ubuntu,Fork,我想知道在这段代码中有多少个进程是从fork()创建的,我做了一些跟踪,最后有20个进程,但我不能确定,你能帮我吗。 多谢各位 #include <stdio.h> #include <sys/types.h> int main() { ** fork(); fork(); if( fork() > 0) { fork(); fork(); } return 0; } #包
#include <stdio.h>
#include <sys/types.h>
int main()
{
**
fork();
fork();
if( fork() > 0)
{
fork();
fork();
}
return 0;
}
#包括
#包括
int main()
{
**
fork();
fork();
如果(fork()>0)
{
fork();
fork();
}
返回0;
}
“请参阅”在执行每个语句时进程的数量是如何变化的:
/* before */ /* ... */ /* after */
/* 1 */ fork(); /* 2 */
/* 2 */ fork(); /* 4 */
/* 4 */ if (fork() > 0) { /* 8 (4 go into the if) */
/* 8 */ fork(); /* 12: 4 (outside) + 8 (inside) */
/* 12 */ fork(); /* 20: 4 (outside) + 16 (inside) */
}
/* 20 */ /* ... */ /* total processes: 20 */
通过在
返回0
之前添加以下行,可以使每个进程打印一个点:
write(STDOUT_FILENO, ".", 1);
如果计算点,总共有20个进程,其中1个进程是在启动程序时创建的。让我们标记创建进程的所有位置:
A: fork();
B: fork();
C: if( fork() > 0)
{
D: fork();
E: fork();
}
return 0;
让我们构建一个树,显示所有创建的进程以及创建它们的fork标签:
A: fork();
B: fork();
C: if( fork() > 0)
{
D: fork();
E: fork();
}
return 0;
在此树中,节点描述了进程,边缘中的标签显示了创建每个子进程的
fork()
调用(例如,proc.1通过fork A创建了proc.2)。如果您对节点进行计数,您将看到它们实际上是20个进程。(很抱歉,我的命名既没有遵循严格的BFS也没有遵循DFS)为什么20不是一个令人满意的答案,特别是因为您似乎已经验证了这一事实?就在返回之前,打印pid和父pid。这将告诉您有多少个进程和父/子树。要查看进程之间的关系,请在返回0之前打印getpid()
和getppid()
的结果代码>评论建议您做什么…也许更好?--<代码>printf(“pid%d,ppid%d\n”,(int)getpid(),(int)getppid())代码> > pMG,这可能不太健壮,因为现在你必须考虑<代码> StdOut< <代码>缓冲区发生什么,当你<代码> For < /C>时,当它需要刷新时。你用什么来画这个图?我用过。但我不得不在谷歌上搜索,事先并不知道。学习如何使用它并不困难。