waitpid()因该如何使用
时间: 2023-09-08 13:11:00 浏览: 107
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()函数的返回值有以下三种情况:
- 如果指定的进程已经结束,则返回该进程的进程ID;
- 如果指定的进程还没有结束且没有设置WNOHANG选项,则会阻塞等待,直到该进程结束;
- 如果指定的进程还没有结束且设置了WNOHANG选项,则会立即返回0。
下面是一个示例代码,演示了waitpid()的基本用法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid = fork();
if (pid == 0) {
// 子进程
printf("This is child process, pid=%d\n", getpid());
sleep(5);
printf("Child process exit.\n");
exit(0);
}
else if (pid > 0) {
// 父进程
printf("This is parent process, pid=%d\n", getpid());
int status;
pid_t wpid = waitpid(pid, &status, 0);
printf("Child process exit, pid=%d\n", wpid);
}
else {
// 创建进程失败
perror("fork");
exit(1);
}
return 0;
}
```
在上面的代码中,我们首先使用fork()创建了一个子进程,然后在子进程中使用sleep()函数让子进程暂停5秒钟,最后调用exit()函数退出。
在父进程中,我们使用waitpid()函数等待子进程结束。因为我们设置了options参数为0,所以父进程会一直阻塞等待,直到子进程结束。
编译并运行上面的代码,可以看到输出结果如下:
```
This is parent process, pid=1234
This is child process, pid=1235
Child process exit.
Child process exit, pid=1235
```
可以看到,父进程先输出了自己的进程ID,然后使用waitpid()等待子进程结束。当子进程结束后,waitpid()返回子进程的进程ID,并且父进程输出了这个进程ID。
阅读全文