一、关于系统级函数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值可能不一样。