c - 检查子进程是否已在 Unix 上的 C 中终止而没有阻塞
问题描述
我想检查子进程是否/何时在 Unix 上的 C 中终止。它不应该阻塞,而是循环中的简短检查。我的代码:
pid_t pid = fork();
if (pid > 0)
// Parent Process
while (1) {
// Do a short check whether Child has already terminated if yes break the loop.
// Ik that it's possible to use waitpid(pid, &status, 0) but that blocks the whole loop until the child has terminated
}
if (pid == 0)
printf("child process born");
exit(0);
提前谢谢
解决方案
第三个参数waitpid
是一组标志。如果你传递WNOHANG
给这个参数,如果没有孩子还没有退出,函数将立即返回。
然后您可以检查是否waitpid
返回 0。如果是,则没有子退出,您等待并重试。
while (1) {
pid_t rval = waitpid(pid, &status, WNOHANG);
if (rval == -1) {
perror("waitpid failed");
exit(1);
} else if (rval == 0) {
sleep(1);
} else {
break;
}
}
推荐阅读
- sentiment-analysis - 使用 PHP 将字符串发送到 python 脚本并将输出返回到 PHP 脚本
- html - CSS-grid自动流:密集不起作用
- javascript - webpack 产生 Uncaught SyntaxError: Unexpected token < bundle.js:1
- constraint-programming - Minizinc 错误:检测到模型不一致
- javascript - 在 react-router-dom 中将 id 作为道具传递
- python - Django / Celery - AttributeError:模块'novopagemento'没有属性'celery'
- java - Android - 相机活动后活动方向卡住
- java - 如何使用 mysql 保存 derby 中的每条记录
- highcharts - Highcharts - 为Y轴上的每个值切换平行于X轴的线?
- c++ - 如何在 c++17 中获取存储在“any”中的数据大小?