当一个子进程结束后,他的父进程没有等待他(wait waitpid)清除他的所有资源时,它就变成一个僵尸进程。
在linux系统中,在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放. 但这样就导致了问题,如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
那么可以通过杀掉他的父进程来把僵尸进程一起杀掉。
ps -aux 其中的ppid 就是一个僵尸进程的父进程