waitpid如何用
时间: 2024-04-01 09:07:47 浏览: 86
深入探讨:unix多进程编程之wait()与waitpid()函数
waitpid函数用于等待指定进程的结束,并且可以获取该子进程的终止状态。
它的函数原型如下:
```c
#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
```
其中,参数`pid`表示要等待的子进程的进程ID,参数`status`是一个指向整型变量的指针,用于存储子进程的终止状态信息,参数`options`用于指定等待的行为。
`waitpid`函数的返回值有以下几种情况:
- 如果指定的子进程还未终止且未设置`WNOHANG`选项,则父进程将阻塞直到子进程终止,返回子进程的进程ID。
- 如果指定的子进程已经终止,父进程可以立即获得其终止状态,并返回子进程的进程ID。
- 如果指定的子进程不存在或不是父进程的子进程,则返回-1,并设置`errno`为合适的错误码。
下面是一个示例代码,演示了如何使用`waitpid`函数等待子进程的结束并获取其终止状态:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid;
int status;
pid = fork();
if (pid == 0) {
// 子进程
printf("This is child process. PID: %d\n", getpid());
exit(0);
} else if (pid > 0) {
// 父进程
printf("This is parent process. Child PID: %d\n", pid);
waitpid(pid, &status, 0);
printf("Child process terminated. Exit status: %d\n", status);
} else {
// fork失败
perror("fork");
exit(1);
}
return 0;
}
```
在上述示例中,父进程调用`waitpid`函数等待子进程的结束,并获取其终止状态。子进程通过`exit`函数终止,并指定了退出状态为0。父进程在接收到子进程结束的通知后,打印出子进程的终止状态。
注意,`waitpid`函数还可以指定一些选项,例如`WNOHANG`选项可以使父进程在子进程尚未终止时立即返回,而不阻塞等待。你可以根据具体的需求来选择合适的选项。
阅读全文