wait与waitpid:
当子进程退出的时候,内核会向父进程发送SIGCHID信号,子进程的退出是一个异步事件(子进程可以在父进程运行的任何时刻终止)。
子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。
父进程查询子进程的退出状态可以用wait/waitpid函数。
当我们用fork启动一个进程时,子进程就有了自己的生命,并将独立的运行,有时候,我们需要知道某个子进程是否已经结束了,可以通过wait安排父进程等待子进程结束。
wait函数原型:
pid_t wait(&status)
status:该参数可以获得你等待子进程的信息
执行成功就会返回子进程pid。
wait系统调用会使父进程暂停执行,直到它的一个子进程结束为止。
返回的是子进程的pid,它通常是结束的子进程。
状态信息允许父进程判定子进程的退出状态,即从子进程的main函数返回的值或子进程中exit语句的退出码。
如果status不是空指针,状态信息将被写入它指向的位置。
wait获取status后检测处理:
WIFEXITED(status)如果子进程正常结束,返回一个非零值
WEXITSTATUS(status)如果WIFEXITED非零,返回子进程退出码
WIFSIGNALED(status) 子进程因为捕获信号而终止,返回非零值
WTERMSIG(status) 如果WIFSIGNALED非零,返回信号代码
WIFSTOPPED(status) 如果子进程被暂停,返回一个非零值
WSTOPSIG(status) 如果WIFSTOPPED非零,返回一个信号代码