不用wait(0),用waitpid()等待指定pid子进程终止如何修改
时间: 2024-10-22 20:11:31 浏览: 21
深入探讨:unix多进程编程之wait()与waitpid()函数
当需要等待特定PID的子进程结束时,可以使用Unix/Linux系统调用`waitpid()`代替直接`wait(0)`,这允许你指定你想等待的具体子进程ID。以下是`waitpid()`的基本用法:
```c
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
// ...执行一些操作...
exit(0); // 子进程退出
} else { // 父进程
int status;
while (waitpid(child_pid, &status, WUNTRACED | WNOHANG) > 0) { // 持续等待子进程结束
// 根据status检查子进程是否正常或异常退出
if (!WIFEXITED(status)) {
// 如果状态表示未正常退出,则处理异常情况
}
}
// 如果waitpid返回0,说明子进程已经结束,或者有其他原因(如无可用子进程)
if (waitpid(child_pid, &status, 0) == -1) {
perror("waitpid failed");
}
}
return 0;
}
```
在这个例子中,`waitpid(child_pid, &status, flags)`函数会阻塞直到子进程结束,并返回其状态信息到`status`变量。`WUNTRACED`用于跟踪子进程的所有退出状态,而`WNOHANG`使得函数在没有子进程结束时立即返回,避免无限阻塞。
阅读全文