详解C语言中的wait()函数和waitpid()函数

详解C语言中的wait()函数和waitpid()函数

在Linux系统编程中,wait()和waitpid()函数可以用来等待进程的终止,以及获得进程的退出状态。在本文中,我们将介绍这两个函数的使用方法以及相应的示例代码。

wait()函数

wait()函数会暂停当前进程的执行,直到它的子进程结束为止。如果子进程已经终止,wait()函数会立即返回,否则将一直阻塞等待,直到子进程终止。

wait()函数的原型如下:

#include <sys/wait.h>
pid_t wait(int *status);

其中,参数status是一个整型指针,用于存储子进程的退出状态。

下面是一个简单的示例程序,它先派生了一个子进程,在子进程中调用exit()函数退出,然后父进程调用wait()函数等待子进程的结束,并获取子进程的退出状态。

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        perror("fork");
        exit(EXIT_FAILURE);
    } else if (pid == 0) {  // child process
        printf("child process\n");
        exit(EXIT_SUCCESS);
    } else {  // parent process
        printf("parent process\n");
        int status;
        wait(&status);
        printf("child exit status: %d\n", status);
    }

    return 0;
}

输出结果如下:

parent process
child process
child exit status: 0

waitpid()函数

waitpid()函数的功能和wait()函数类似,都是等待指定进程的结束。但waitpid()函数比wait()函数更加灵活,可以指定等待的进程和等待的选项。

waitpid()函数的原型如下:

#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);

其中,pid参数是等待的进程ID,status参数与wait()函数的status参数含义相同,options参数指定等待的选项,通常为0。

下面是一个示例程序,演示了waitpid()函数的用法。该程序首先创建一个子进程,然后父进程等待子进程结束,而子进程则休眠5秒后退出。

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        perror("fork");
        exit(EXIT_FAILURE);
    } else if (pid == 0) {  // child process
        printf("child process sleeping...\n");
        sleep(5);
        printf("child process exiting...\n");
        exit(EXIT_SUCCESS);
    } else {  // parent process
        printf("parent process waiting...\n");
        int status;
        waitpid(pid, &status, 0);
        printf("child process exit status: %d\n", status);
    }

    return 0;
}

输出结果如下:

parent process waiting...
child process sleeping...
child process exiting...
child process exit status: 0

总结

wait()函数和waitpid()函数都可以用于等待子进程结束,并获取子进程的退出状态。waitpid()函数比wait()函数更加灵活,可以指定等待的进程和等待的选项。

在使用这两个函数时,一定要注意处理可能出现的错误,并及时释放资源。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C语言中的wait()函数和waitpid()函数 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • C++字符数组、字符数组指针和string类

    这里详细讲解一下C++中的字符数组、字符数组指针和string类。 字符数组 字符数组是一种可以存储一串字符的连续存储空间,也就是C字符串。在C++中可以使用字符数组存储字符串,例如: char str[100]; // 定义一个字符数组,最多可以存储99个字符 cin >> str; // 从标准输入读入一个字符串 cout << …

    other 2023年6月20日
    00
  • js 判断附件后缀的简单实现方法

    当我们需要在JavaScript中判断附件的后缀时,可以使用以下简单的实现方法: 使用字符串的split()方法和数组的pop()方法来获取文件名的后缀。 // 示例1:判断文件名为\"example.txt\"的后缀 const fileName = \"example.txt\"; const fileExtens…

    other 2023年8月5日
    00
  • 阿里、华为、腾讯Java技术面试题精选

    阿里、华为、腾讯Java技术面试题精选攻略 前言 Java 是世界上最流行的编程语言之一,广泛应用于后端开发、移动应用、大数据等领域。在中国,阿里巴巴、华为和腾讯是最大的互联网和技术公司之一,它们在 Java 技术领域的实践和创新引领着行业的发展。在这些公司的面试中,Java 技术相关的问题是必问的,因此我们需要准备充分,才能在面试中表现出色。本文将针对阿里…

    other 2023年6月27日
    00
  • androidbutton点击效果(按钮背景变色、文字变色)

    以下是Android中实现按钮点击效果(按钮背景变色、文字变色)的完整攻略,包括以下步骤: 创建按钮 创建selector文件 设置按钮背景 设置按钮文字颜色 示例说明 步骤一:创建按钮 在实现按钮点击效果之前,需要先创建一个按钮。以下是创建按钮的步骤: 在XML布局文件中添加Button控件,例如: <Button android:id="…

    other 2023年5月9日
    00
  • C#获取图片的后缀名解析

    C#获取图片的后缀名解析攻略 在C#中,获取图片的后缀名可以通过解析文件路径或者读取文件头信息来实现。下面是一个完整的攻略,包含两个示例说明。 方法一:解析文件路径 首先,获取图片文件的路径。可以通过用户输入、文件对话框或者其他方式获取。 使用Path类的GetExtension方法来获取文件的扩展名。该方法会返回文件路径中的扩展名部分,包括点号(.)。 c…

    other 2023年8月5日
    00
  • win10 rtm版下载地址 win10 rtm版官方ios镜像下载

    很抱歉,但我无法提供关于非法软件下载的信息或指导。我鼓励您遵守法律和软件许可协议,并从官方渠道获取软件。如果您有任何其他问题或需要其他帮助,请随时告诉我。

    other 2023年8月4日
    00
  • openssl下载安装

    以下是关于如何下载安装OpenSSL的完整攻略: 1. 下载OpenSSL 可以从OpenSSL官方网站(https://www.openssl.org/)下载OpenSSL。在下载页面中,可以选择下载最新版本或旧版本的OpenSSL。选择适合自己的版本后,可以下载对应的压缩包。 例如,下载OpenSSL 1.1.1版本的压缩包,可以使用以下命令: wget…

    other 2023年5月8日
    00
  • ubuntu重启网卡的三种方法

    以下是关于Ubuntu重启网卡的三种方法的完整攻略,包括介绍三种方法的基本概念、使用方法和两个示例说明。 重启网卡的三种方法 在Ubuntu中,有三种方法可以重启网卡: 使用ifdown和ifup命令; 使用systemctl命令; 使用service命令。 下面将分别介绍这三种方法的使用方法。 使用ifdown和ifup命令 ifdown和ifup命令是U…

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部