孤儿进程和僵尸进程

子进程和父进程不是同时结束的话将会产生孤儿进程(父进程结束子进程未结束)僵尸进程(子进程)

孤儿进程

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

僵尸进程

任何一个子进程在结束后,并不是马上消失掉,而实留下一些资源等待父进程处理,那么僵尸进程就是当子进程比父进程先结束,而父进程又没有释放子进程占用的资源,此时子进程将成为一个僵尸进程。

机制

每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号 the process ID,退出状态 the termination status of the process,运行时间 the amount of CPU time taken by the process等),直到父进程通过 wait / waitpid 来取时才释放。

本质上来说只有僵尸进程是问题,孤儿进程是为了解决僵尸进程的一种进程转化。