c - 使用 fork 时 while(wait(NULL)){} 和 while(wait(NULL) > 0){} 有什么区别
问题描述
我有以下代码:
#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){}
只要有孩子返回就会循环,并在返回 -1 时退出。
推荐阅读
- json - 在 Flutter / Dart 中解析 JSON:
() => 地图 , NoSuchMethodError -(数组问题?) - shiny - 获取活动选项卡名称
- c++ - 避免相交所需的最小角度
- php - 在 PHP 7.4 Alpine 3.11 中找不到错误 PDO 类
- java - 我从 apache png transcoder 得到一个 org.apache.batik.bridge.BridgeException
- laravel - 我在使用 Laravel 上传图片时遇到问题
- django - Heroku 上 Hasura 的数据库凭据
- python - 行拆分 - 如何保留缺少值的列
- python - gdal_calc.py 返回“系统找不到指定的路径。” 与蟒蛇3
- c++ - LINKED LIST APPEND,有没有办法让这个功能更快地工作?