Linux 中等待的函数究竟有哪些奥秘?

Linux 中等待的函数究竟有哪些奥秘?插图1

在Linux中,常用的等待函数包括waitwaitpid,以下是关于这两个函数的详细解释:

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

小末小末
上一篇 2025年7月6日 02:03
下一篇 2025年7月12日 00:32