详解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日

相关文章

  • java网络编程之socket网络编程示例(服务器端/客户端)

    Java网络编程是一门重要的计算机网络技术,其能让程序员通过网络实现数据传输,协作会话,远程调用等等。而Socket编程是Java网络编程的基础。本文将详细讲解Java Socket网络编程的核心概念和使用方法,并提供两个范例以供参考。 简介 Socket是两个不同设备之间相互通信的一种技术。它是一种网络间进程通信机制。Socket在JAVA编程中被封装成为…

    other 2023年6月25日
    00
  • javascript实现快速排

    JavaScript实现快速排序的完整攻略 快速排序是一种常用的排序算法,它的时间复杂度为O(nlogn),是一种高效的排序算法。本文将介绍如何使用JavaScript实现快速排序,并提供两个示例说明。 快速排序的原理 快速排序的原理是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法对这两部分…

    other 2023年5月5日
    00
  • asp.net 文件路径之获得虚拟目录的网站的根目录

    获取虚拟目录的根目录常用于ASP.NET应用程序中引用相对于根目录的文件或路径。以下是获取虚拟目录根目录的步骤: 步骤1:获取HttpContext对象 我们可以通过HttpContext对象来获得虚拟目录的根目录。 HttpContext context = HttpContext.Current; 步骤2:获取请求对象 HttpContext对象有一个R…

    other 2023年6月27日
    00
  • 非常实用的windows运行打开服务命令

    在Windows操作系统中,有许多实用的运行打开服务命令,可以帮助您快速访问和管理系统中的各种服务。以下是使用这些命令的完整攻略: 步骤1:打开运行窗口 首先,您需要打开运行窗口。您可以使用以下快捷键打开运行窗口: Windows键 + R 步骤2:输入服务命令 在运行窗口中,您可以输入以下命令来访问和管理系统中的各种服务: 1. services.msc …

    other 2023年5月9日
    00
  • Win11电脑重启很慢怎么办? win11系统电脑开机慢的解决办法

    Win11电脑重启很慢怎么办? 在Win11系统中,电脑重启很慢可能是由于某些启动项、服务等导致的。下面介绍几种可能的解决办法。 1. 检查启动项 启动项指的是开机自启动的应用程序。有些应用程序在开机自启时可能会占用大量CPU资源,进而导致电脑开机速度变慢。因此,检查和优化启动项可以缩短电脑开机时间。 步骤: 打开任务管理器,选择“启动”选项卡。 对于不必要…

    other 2023年6月26日
    00
  • 晋江小说阅读中怎么修改昵称? 晋江小说修改用户名的技巧

    下面是“晋江小说阅读中怎么修改昵称? 晋江小说修改用户名的技巧”的完整攻略。 一、前置条件 在修改昵称之前,需要先登录晋江文学城账号。 二、修改昵称 在晋江文学城网站首页上方,点击“我的空间”按钮进入个人空间页面。 在个人空间页面中,找到“个性设置”栏目,点击对应的“编辑”按钮进入编辑页面。 在编辑页面中,找到“用户信息”模块下的“昵称”一项,将原昵称更改为…

    other 2023年6月27日
    00
  • Win10系统开机提示”cnext.exe 应用程序错误”的故障原因及解决方法

    故障原因 出现”cnext.exe 应用程序错误”的原因可能有以下几种: 病毒或恶意软件感染 – 可能会导致系统文件被破坏或删除。 Windows注册表损坏 – 可能会导致系统异常。 AMD Catalyst驱动程序安装错误 – 可能会导致系统异常。 解决方法 针对”cnext.exe 应用程序错误”,以下是一些可能的解决方法: 执行系统病毒和恶意软件扫描 …

    other 2023年6月25日
    00
  • 告别DNS劫持,一文读懂DoH

    以下是告别DNS劫持,一文读懂DoH的完整攻略,包括基本概念、使用方法、示例说明和注意事项。 基本概念 DNS劫持是一种网络攻击方式,攻击者通过篡改DNS解析结果,将用户的访问请求重定向到恶意网站。DNS-over-HTTPS(DoH)是一种新的DNS解析方式,它使用HTTPS协议加密DNS请求和响应,防止DNS劫持和窃听。 使用方法 以下是使用DoH的步骤…

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