我有一个臭味问题 :(
我有这段代码:
输出类似于:
我认为 wait(0) 不是等待所有子进程,而只是等待第一个退出并写入所有的 (Exit = ...)。
有没有办法做到这一点?
我有这段代码:
int main()
{
pid_t child, parent;
int status=0;
int i;
printf("parent = %d\n", getpid());
for(i=1; i<=5; i++){
if( (child = fork()) == 0){
sleep(i);
printf("i=%d, %d\n",i, getpid());
}
}
wait(0);
while( (parent = wait(&status)) > 0){
printf("Exit = %d, child = %d\n", status/256, parent);
}
}
输出类似于:
1, 21320
2, 21321
Exit = 0, child = 21321
3, 21322
Exit = 0, child = 21322
4, 21323
Exit = 0, child = 21323
5, 21324
Exit = 0, child = 21324
我认为 wait(0) 不是等待所有子进程,而只是等待第一个退出并写入所有的 (Exit = ...)。
有没有办法做到这一点?
1, 21320
2, 21321
3, 21322
4, 21323
5, 21324
Exit = 0, child = 21320
Exit = 0, child = 21321
Exit = 0, child = 21322
Exit = 0, child = 21323
Exit = 0, child = 21324
?
wait
的手册上说,“wait 暂停调用进程,直到其中一个子进程结束。” - M.Mstatus/256
有点奇怪。试试用 WEXITSTATUS。而且parent = wait()
只是令人困惑。它(理想情况下)返回的是子进程的 pid。 - Duck