在 UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用 wait / waitpid)他,那 么他将变成一个僵尸进程。当用 ps 命令观察进程的执行状态时,看到这些进程的状态栏为 defunct。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个 位置(slot)

但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结 束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的 这个进程的子进程,如果是的话,就由 Init 进程来接管他,成为他的父进程,从而保证每个 进程都会有一个父进程。而 Init 进程会自动 wait 其子进程,因此被 Init 接管的所有进程都不 会变成僵尸进程