我有以下代码:
#include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<unistd.h>
int main() {
for(int i = 0; i <3; i++){
fork();
}
while(wait(NULL)){}
printf("Text\n");
return 0;
}
当我尝试执行它时,我收到一个 SIGKILL
错误,而不是从 fork 调用中收到 8 条文本消息。但是,如果我改变
while(wait(NULL)){}
到
while(wait(NULL) == 0){}
或
while(wait(NULL) > 0){}
我按预期收到了 8 份“文本”打印件。
为什么程序在第一种情况下不工作?难道 wait(NULL)
循环或 wait(0)
循环应该等到所有子进程执行完毕?
感谢您的帮助!
最佳答案
当你这样做时:
while(wait(NULL)){}
这等同于:
while(wait(NULL) != 0){}
wait
函数在成功时返回子 pid,在出错时返回 -1。因此返回值永远不会为 0。这将导致无限循环。
这样做:
while(wait(NULL) > 0){}
只要有 child 返回就会循环,返回-1时退出。
关于c - 使用 fork 时 while(wait(NULL)){} 和 while(wait(NULL) > 0){} 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62665905/