Linux进程间同步之wait

一、关于系统级函数wait

1、作用

    实现进程同步。

    当子进程执行时, wait()可以暂停父进程的执行,使其等待。一旦子进程执行完,等待的父进程就会重新执行。如果有多个子进程在执行,那么父进程中的 wait()在第一个子进程结束时返回,恢复父进程执行。

2、函数信息

头文件:sys/wait.h

函数签名:pid_t wait(int *status)

说明:

     形参:如果status是一个指向整型数的指针,当wait 返回时,该指针就指向子进程退出时的状态信息。

                如果status是null指针,wait将忽略该参数。

     返回值:-1,表示没有子进程结束;其他,表示结束的子进程的进程标识符。

3、通常用法

    父进程调用 fork()子进程后要调用 wait()。如下样例:

pid=fork();
if (!pid)
{
    /* 子进程 */
} 
else 
{
    /* 父进程 */
    wait(NULL);
}

二、栗子

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

int main()
{
    pit_t pid = -1;

    if((pid = fork()) < 0)
    {
        perror("fork failed");
        return 1;
    }

    if (!pid)
    { // 子进程
        sleep(4);
        return 5; 
    }
    else  // 父进程
    {
        int status = 0;
        if (wait(&status) < 0)
        {
            perror("wait failed");
            return 1;
        }

        if (status & 0xFF)
        {
            printf("Somne low-roderbits not zero\n");
        }
        else 
        {
            int exit_status = 0;
            exit_status=status >> 8;
            exit_status &= 0xFF;
            printf("Exit status from pid[%d] was exit_status[%d]\n", pid, exit_status);
        }
    }

    return 0;
}   

执行输出:Exit status from pid[2] was exit_status[5]

注:不同的环境pid值可能不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值