
在Linux中,常用的等待函数包括wait和waitpid,以下是关于这两个函数的详细解释:
wait函数
| 属性 | 详情 |
| 函数原型 | pid_t wait(int *status); |
| 头文件 | #include<sys/types.h>#include<sys/wait.h> |
| 功能描述 | 暂停当前进程的执行,直到一个子进程终止,当子进程终止后,wait函数会返回子进程的进程ID(PID),并将子进程的终止状态存储在指针status指向的变量中。 |
| 参数 | *status*:输出型参数,用于获取子进程退出状态,如果不关心终止状态,可以设置为NULL。 |
| 返回值 | 成功时返回被等待进程的PID;失败时返回-1,并设置errno。 |
| 使用场景 | 当父进程不关心具体是哪个子进程结束,或者想要等待任意一个子进程结束时使用。 |
waitpid函数
| 属性 | 详情 | ||
| 函数原型 | pid_t waitpid(pid_t pid, int *status, int options); | ||
| 头文件 | #include<sys/types.h>#include<sys/wait.h> | ||
| 功能描述 | 等待指定子进程终止的系统调用,与wait函数类似,但提供了更细致的操作选项。 | ||
| 参数 | *pid*: -1:等待任一个子进程(与wait等效) >0:等待其进程ID与pid相等的子进程 0:等待和当前进程同一进程组的任意子进程 < -1:等待进程组ID为 | pid | 的任何子进程 *status*:同wait函数,用于接收子进程的状态信息 *options*:等待选项,如WNOHANG(非阻塞等待) |
| 返回值 | 正常返回时返回收集到的子进程的进程ID;如果设置了WNOHANG且没有已退出的子进程可收集,则返回0;如果调用中出错,则返回-1,并设置errno | ||
| 使用场景 | 当父进程需要等待特定的子进程结束,或者想要更灵活地控制等待行为时使用。 |
示例代码
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程代码
sleep(2);
std::cout << "Child process exiting...
";
exit(0);
} else if (pid > 0) {
// 父进程代码
int status;
waitpid(pid, &status, 0); // 等待特定子进程结束
if (WIFEXITED(status)) {
std::cout << "Child process exited with status " << WEXITSTATUS(status) << "
";
}
} else {
// fork failed
std::cerr << "Fork failed
";
}
return 0;
} 上述示例中,父进程使用waitpid函数等待特定的子进程结束,并检查子进程的退出状态。
各位小伙伴们,我刚刚为大家分享了有关Linux等待的函数的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/91473.html