孤儿进程与僵尸进程

孤儿进程

一个父进程退出, 而他的一个或者多个子进程还在运行, 那么这些子进程将成为孤儿进程. 孤儿进程将被init(进程号为1)所收养, 并有init进程对他们完成状态收集工作.

由于孤儿进程会被init收养, 所以孤儿进程不会对系统造成危害.

僵尸进程

一个子进程的进程描述符在子进程退出不会释放, 只有当父进程通过wait()或者waitpid()获取了子进程信息后才会释放. 如果子进程退出, 而父进程并没有调用wait()或者waitpid(), 那么子进程描述符仍然保存在系统中, 这种进程称之为僵尸进程.

僵尸进程通过ps命令显示出来的状态为Z(zombie).

系统所能使用的进程号是有限的, 如果产生大量僵尸进程, 将因为没有可用的进程号而导致系统不能产生新的进程.

要消灭系统中大量的僵尸进程, 只需要将其父进程杀死, 此时僵尸进程就会变为孤儿进程, 从而被init收养, 这样init就会释放掉所有的僵尸进程所占有的资源, 从而结束僵尸进程.