系统编程-进程-wait、waitpid和WIFEXITED系列宏 超级详解

1.  wait、waitpid 函数简介

补充:对于waitpid,如果返回值为0,表示指定去等待的子进程尚未结束。

该系列宏的使用方法展示:

PART1

实验思路:

使用wait系统调用让父进程给子进程收尸,并获取子进程的返回值。

同时,正常终止。

直接打印获取的返回值会与实际返回的值不一样,进而引出检查WIFEXITED/WEXITSTATUS(status)等系列宏。

实验1: waitpid或waitpid,使用展示, 同时,直接使用printf打印出子进程的返回值

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <sys/wait.h>

int main(void)

{

    int status = 0;

    pid_t pid;

    printf("pid: %ld\n", (long)getpid());

    pid = fork();

    if (pid < 0) {

        printf("fork error");

    }

    else if (pid == 0) {   

        sleep(2);

    printf("pid: %ld,  ppid: %ld\n", (long)getpid(), (long)getppid());

        exit(3);

    }

    if (waitpid(pid, &status, 0) != pid) { //     if (wait(&status) != pid) {  这里也可以使用wait, 我这里对waitpid的使用也是阻塞方式的

        printf("waitpid error");

    }

    else{

    printf("status =%d\n", status);

    }

    return 0;

}

编译运行:

可以看到,本实验中的waitpid在2秒后才返回,成功替子进程收尸。

但是我们打印的status不对劲,我们的代码内子

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值