zombie不占用内存也不占用CPU,表面上我们可以不用在乎它们的存在,然而事实上UNIX系统限制了某一时刻能同时存在的进程的最大数目。如果程序不及时清理系统中的zombie,最终会导致进程数过多,当再次需要产生新进程时就会出错。
#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int &statloc);
pid_t waitpid(pid_t pid,int *statloc, int options);
Both return:process ID if OK,-1 on error
a 阻塞(如果它的子进程还在运行)
b 立即返回子进程结束信息(如果一个子进程已经结束并等待父进程获取信息)
c 返回错误(如果不存在子进程)
Macro | Description |
WIFEXITED(status) | 如果status是由一个正常结束的进程产生的则值为真,此时我们可以继续使用宏WEXITSTATUS(status)来 |
WIFSIGNALED(status) | 如果status是由一个异常结束(接受到一个信号)的进程产生的则值为真,此时使用宏WTERMSIG(status)来获取信号数。 |
WIFSTOPPED(status) | 如果status是由一个接受到信号目前终止的进程产生的 |
WNOHANG
WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。
pid==-1 等待任何一个子进程,此时waitpid的作用与wait相同
pid >0
pid==0
pid<-1
1 waitpid使我们可以等待指定的进程
2 waitpid提供了一个无阻塞的wait
3 waitpid支持工作控制