僵尸进程(zombie process):在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中运行的所有进程, 看有没有哪个进程是【刚刚结束的这个进程】的子进程,如果是的话,就由Init 来接管他,成为他的父进程.
下面的程序就演示了如何通过wait调用来获取子进程退出状态。
在用户第一次回车之前,通过ps命令,应该可以看到子进程是 defunct 状态 (也就是zombie态),而一旦按下回车,wait被调用,此时通过ps命令就无法看到那个zombie了。所以防止zombie process的方法就是通过wait/waitpid等调用来解决。