Linux中wait()和waitpid()函数怎么使用
在Linux中,`wait()`和`waitpid()`函数用于等待子进程的终止。
`wait()`函数的原型如下:
pid_t wait(int *status);
其中`status`是一个指向整型变量的指针,用于存储子进程的退出状态。该函数会阻塞调用进程,直到一个子进程终止。如果子进程已经终止,那么它的退出状态会被立即返回。如果调用进程没有子进程或者子进程已经被其他进程等待,那么`wait()`函数会立即出错返回-1。
`waitpid()`函数的原型如下:
pid_t waitpid(pid_t pid, int *status, int options);
其中`pid`是要等待的子进程的进程ID。使用`-1`表示等待任意子进程。`status`参数用于存储子进程的退出状态。`options`参数用于指定其他选项,如`WNOHANG`表示非阻塞等待。
`waitpid()`函数会阻塞调用进程,直到指定的子进程终止。如果指定的子进程已经终止,那么它的退出状态会被立即返回。如果调用进程没有指定的子进程或者指定的子进程已经被其他进程等待,那么`waitpid()`函数会立即出错返回-1。
以下是一个使用`wait()`函数的示例:
#include
#include
#include
#include
#include
int main() {
pid_t pid;
int status;
pid = fork();
if (pid == 0) {
// 子进程
printf("子进程开始运行\n");
sleep(3);
printf("子进程结束\n");
exit(0);
} else if (pid > 0) {
// 父进程
printf("父进程等待子进程终止\n");
wait(&status);
printf("子进程终止\n");
} else {
// fork失败
printf("fork失败\n");
return 1;
}
return 0;
}
以下是一个使用`waitpid()`函数的示例:
#include
#include
#include
#include
#include
int main() {
pid_t pid;
int status;
pid = fork();
if (pid == 0) {
// 子进程
printf("子进程开始运行\n");
sleep(3);
printf("子进程结束\n");
exit(0);
} else if (pid > 0) {
// 父进程
printf("父进程等待子进程终止\n");
waitpid(pid, &status, 0);
printf("子进程终止\n");
} else {
// fork失败
printf("fork失败\n");
return 1;
}
return 0;
}
以上示例中,父进程会等待子进程终止,然后打印相应的信息。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341