【发布时间】:2017-01-28 09:11:45
【问题描述】:
{
if(fork() && fork())
{
fork();
}
if(fork() || fork())
{
fork();
}
printf("hello");
return 0;
}
我不知道 fork() 在此处的行为方式以及 hello 将被打印多少次。
我只知道fork() && fork() 将为 1 个父进程生成总共 3 个进程,同样,fork() || fork() 将为 1 个父进程生成 3 个进程。
在第一个 if 条件之后,创建了 3 个进程,只有父进程会进入 if 块。现在总共有 4 个进程。现在,如何进一步进行,我完全搞砸了?
如果可能,请展示一个树形图。
【问题讨论】:
-
使用调试器运行您的程序。并且还可以使用strace(1) - 可能与
-f选项一起使用 - 以了解所涉及的系统调用。顺便说一句,你的问题看起来像一个家庭作业。所以仔细阅读fork (system call)然后是advancedlinuxprogramming.com的相关章节 -
顺便说一句,将
printf语句更改为printf("hello in %d parent %d\n", (int)getpid(), (int)getppid());应该很有帮助。在程序开头添加printf("start pid %d\n", getpid());应该会有很大帮助。 -
最后,您应该始终将
fork的结果明确地保存在某个局部变量中,并且您应该测试fork是否失败。
标签: operating-system fork parent-child