...
int main(void)
{
int i;
for(i=0;i<2;i++){
switch(fork()){
case 0:
sleep(1);
break;
default:
sleep(1);
}
}
while(i--) wait(NULL);
return 0;
}
您好。我正在尝试理解流程和分叉。
我不确定此代码段创建了多少个进程。
1为主程序,然后主程序复制自己(创建子进程),然后子进程复制(2个子进程和主进程)。
所以这些是3个过程。
我是正确的还是我错过了什么?
答案 0 :(得分:2)
主线程(t1)中有一个for
循环,它将调用fork()
两次( - &gt; t1.1,t1.2)。第一个分叉线程(t1.1)有一个迭代,所以它创建另一个( - > t1.1.1)。 t1.2和t1.1.1都没有剩下的迭代,所以没有更多的线程分叉。
这给我们留下4个线程altoghether
答案 1 :(得分:1)
请注意,交换机中两种情况的行为是相同的:sleep(1)然后继续w /循环。既然你的解决方案有两种不同的行为(一种创建了孩子,另一种没有创建),我会说你遗漏了一些东西。