僵尸进程和孤儿进程简介
Posted on 2016-11-30 in Linux • Tagged with linux • Leave a comment
前言
最近在做内部使用的 Docker base image,老大甩给我几个链接让我关注一下 Docker init process 的问题,其中有一篇文章详细描述了 Docker PID 1 僵尸程序回收的问题,我也趁此机会学习了一下有关僵尸进程和孤儿进程的知识。
基本概念
Linux 系统中运行的所有进程按照一颗树的形式组织。每个进程都可以生成子进程,并且除了最顶端的init
进程,每个进程都会有一个父进程。
当我们启动系统的时候,kernel
会启动最顶端的init
进程,然后由init
进程启动余下的部分,比如说SSH服务,Docker服务,Apache/Nginx,图形化界面等等,而它们又可以继续生成其他的子进程。
通常来说,当一个子进程退出的时候,父进程会收到操作系统发来的SIGCHLD
信号并且调用wait()
或者waitpid()
来取得子进程的终止状态,这个行为被叫做 …