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

相关文章

  • swipe.js文档

    什么是swipe.js? swipe.js是一个轻量级的JavaScript,用于创建响应式的、可触摸滑动幻灯片。它支持多种滑动效果和自定义选项,可以轻松集成到您的网站或应用程序中。 如何使用swipe.js? 以下是使用swipe.js的步骤: 引入swipe文件。 “`html “` 创建HTML结构。 “`html Slide 1 Slide 2…

    other 2023年5月7日
    00
  • python如何查询mysql

    以下是Python如何查询MySQL的完整攻略,包括MySQL连接、查询、结果处理等内容,过程中包含两个示例说明。 1. MySQL连接 在Python中,我们可以使用mysql-connector-python模块来连接MySQL数据库。以下是一个连接MySQL数据库的示例: import mysql.connector # 连接MySQL数据库 mydb…

    other 2023年5月10日
    00
  • ASP.NET MVC分页控件

    下面是关于“ASP.NET MVC分页控件”的详细攻略: 什么是ASP.NET MVC分页控件 ASP.NET MVC分页控件是一种可以在ASP.NET MVC网站中使用的工具。它可以帮助网站开发者在网页中实现分页功能,让用户能够更好地浏览和查看网站的内容。 ASP.NET MVC分页控件的使用方法 ASP.NET MVC分页控件的使用方法较为简单,主要包括…

    other 2023年6月27日
    00
  • django中的filter详解

    Django中的Filter详解 在Django中,Filter是一个非常常用的功能,它允许我们对 QuerySet 进行筛选和过滤。本文将详细介绍Django中 Filter 的使用方法和实现原理。 什么是Filter? Filter是Django QuerySet 中最常用的功能之一,它是一个方法,用于对一个查询集进行筛选和过滤。使用Filter方法可以…

    其他 2023年3月29日
    00
  • Win8.164位/32位KB3096053补丁下载 主要修复KB3069114安装问题

    Win8.1 64位/32位 KB3096053补丁下载攻略 简介 KB3096053补丁是为Windows 8.1操作系统设计的一个重要更新,主要用于修复KB3069114安装问题。本攻略将详细介绍如何下载和安装该补丁。 步骤 打开浏览器,访问微软官方网站。 在搜索框中输入“KB3096053补丁下载”并按下回车键。 在搜索结果中找到适用于Windows …

    other 2023年7月28日
    00
  • Linux硬盘问题的八种解决技巧

    Linux硬盘问题的八种解决技巧 本文将为您介绍Linux系统下硬盘问题的八种解决技巧,包括FSCK命令、dd命令、badblocks命令、smartmontools软件、磁盘挂载、GRUB修复、RAID阵列修复以及数据恢复等方面。针对这些问题的解决方法,本文将进行详细解释。 1. FSCK命令 FSCK命令(File System Consistency …

    other 2023年6月27日
    00
  • YingInstall是什么?小颖安装程序制作专家安装使用图文教程

    YingInstall是什么? YingInstall是一款免费的安装程序制作工具,可以帮助开发者制作安装程序,提高软件发布的效率。 小颖安装程序制作专家安装使用图文教程 下载和安装 首先,需要下载小颖安装程序制作专家,可以在官网(http://www.yingsoft.com/yinginstall/index.html)下载最新版本。 安装完成后,打开软…

    other 2023年6月25日
    00
  • C#实现多选项卡的浏览器控件

    C#实现多选项卡的浏览器控件的攻略可以分为以下步骤: 设计控件的外观与行为 首先,我们需要考虑该控件的外观应该怎样设计。通常情况下,一个浏览器控件需要包含以下元素: 顶部工具栏:提供网址输入框、前进/后退/刷新按钮等功能; 多个选项卡:每个选项卡显示一个网页; 主要区域:显示当前选项卡打开的网页内容。 因此,我们可以设计一个包含以上三个元素的用户控件,并在控…

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