用户名: 密码: 忘记密码? 注册

Linux进程学习笔记

作者:  时间: 2010-12-22

#include <sys/wait.h>
pid_t wait(int *stat_loc);

暂停父进程,直到子进程完成或退出。若stat_loc不为空则将子进程的退出代码或者状态信息保存到上面。下面这些宏解释这个状态信息

WIFEXITED(stat_val)                 如果子进程正常结束,它就取一个非零值
WEXITSTATUS (stat_val)          
如果WIFEXITED,则它返回子进程的退出代码
WIFSIGNALED (stat_val)          
如果子进程因为未捕获的信号而终止,取一个非零值。
WTERMSIG (stat_val)              
如果WIFSIGNALED返回非零,则返回信号代码
WIFSTOPPED(stat_val)             
如果子进程意外终止,它就取一个非零值。
WSTOPSIG (stat_val)               
如果WIFSTOPPED非零,则取一个信号代码。

子进程结束了,而父进程还没调用到Wait那么子进程就会变成僵尸进程。这个时候如果父进程异常终止,则子进程的PPID就会变成1. Init进程将会接管这个僵尸进程,并最终释放其占有的资源。但是这个过程比较慢,所以应该避免产生僵尸进程。

Pid_t waitpid(pid_t pid, int *stat_loc, int options);

Options 设置成WNOHANG可以查看子进程是否终止。