Linux的waitpid()函数怎么使用
waitpid()函数是用来等待子进程结束的函数,其原型如下:
```c
#include
#include
pid_t waitpid(pid_t pid, int *status, int options);
```
参数说明:
- `pid`:指定要等待的子进程ID,可以是具体的进程ID,也可以是以下值之一:
- `-1`:等待任意子进程结束;
- `0`:等待和调用进程属于同一个进程组的任意子进程结束;
- 大于0的值:等待指定进程ID的子进程结束。
- `status`:用于存储子进程的退出状态信息,如果不关心子进程的退出状态,可以将该参数设为`NULL`。
- `options`:设置等待的选项,常用的选项包括:
- `WUNTRACED`:如果子进程进入暂停状态,则立即返回;
- `WCONTINUED`:如果子进程由暂停状态变为继续运行状态,则立即返回;
- `WNOHANG`:如果没有子进程退出或者进入暂停状态,则立即返回0,而不阻塞等待。
返回值:
- 如果调用成功,返回子进程的进程ID;
- 如果调用失败,返回-1。
下面是一个示例代码,演示了如何使用waitpid()函数等待子进程结束:
```c
#include
#include
#include
#include
#include
int main() {
pid_t pid = fork(); // 创建子进程
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) {
// 子进程执行的代码
printf("Child process: My PID is %d\n", getpid());
sleep(2); // 子进程休眠2秒
exit(0); // 子进程退出
} else {
// 父进程执行的代码
printf("Parent process: My PID is %d\n", getpid());
int status;
pid_t child_pid = waitpid(pid, &status, 0); // 等待子进程结束
if (child_pid < 0) {
perror("waitpid");
exit(1);
}
if (WIFEXITED(status)) {
printf("Child process %d exited with status %d\n", child_pid, WEXITSTATUS(status));
}
}
return 0;
}
```
运行以上代码,将输出父进程的PID、子进程的PID以及子进程的退出状态。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341