Linux使用 wait() 或 waitpid() 函数在父进程中等待子进程结束。
时间: 2024-09-27 20:12:45 浏览: 64
在Linux系统中,`wait()` 和 `waitpid()` 函数用于父进程等待其子进程的结束状态。这两个函数的主要作用是让父进程暂停运行,直到子进程结束为止,或者提供子进程的状态信息。
1. `wait()` 函数:这是早期版本的函数,它的基本形式是 `wait(&status)`,其中 `status` 是一个整型指针,用于接收子进程的退出状态。这个函数会阻塞,直到任何一个已知的子进程结束,然后将该子进程的信息存储在 `status` 变量中。如果没有传递 `status` 参数,函数会直接返回子进程ID。
2. `waitpid(pid, &status, flags)`:这是一个更灵活的版本,允许指定等待的具体子进程ID (`pid`),以及一些标志 (`flags`) 来控制行为。除了返回子进程的退出状态之外,还可以通过 `&status` 获取更多关于子进程的信息,比如是否正常结束、是否崩溃、是否收到信号等。
使用这两个函数时,父进程通常会在子进程结束后读取 `status` 变量,获取子进程的退出状态码,以便判断子进程是否有异常情况。
例如:
```c
#include <sys/wait.h>
...
while (true) {
int status;
pid_t child_pid = wait(&status);
if (child_pid == -1) {
perror("Wait error");
break;
} else if (WIFEXITED(status)) {
printf("Child %d exited normally with status %d\n", child_pid, WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("Child %d terminated by signal %d\n", child_pid, WTERMSIG(status));
} else {
printf("Unknown termination state for child %d\n", child_pid);
}
}
```
阅读全文