【发布时间】:2020-04-17 22:00:59
【问题描述】:
我尝试在 C 中创建一个进程树,如下图所示:
请注意,必须按照字母顺序创建进程树。
我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc, char **argv)
{
pid_t b,c,d,e,f,g,h;
if(b = fork() == 0)
{
if(e = fork() == 0){}
else
{
if(f = fork() == 0)
{
sleep(1);
if(h = fork() == 0){}
}
}
}
else
{
if(c = fork() == 0)
{
sleep(0.5);
if(g = fork() == 0){}
}
else
{
if(d = fork() == 0){}
}
}
return 0;
}
我使用 sleep 来延迟进程,以便可以按正确的顺序创建它们。但我认为这不是正确的方法,谁能告诉我正确和更可靠的方法?
【问题讨论】:
-
我的第一个注释是,
if(e = fork() == 0)与if((e = fork()) == 0)不同。因此,如果您运行的实际代码在这两者之间存在差异,它们实际上都应该是后者(第一个if(e = fork() == 0)将确定fork() == 0是true还是false,然后分配 @987654330 @ 是那个布尔值(如果没有发生错误,true很可能被转换为1和false到0)