分类: LINUX
2010-12-22 20:55:42
#include
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可以查看子进程是否终止。