linux如何杀掉孤儿进程,僵尸进程与孤儿进程,以及如何避免僵尸进程

僵尸进程与孤儿进程

linux提供一种机制使子进程在退出时候,父进程能够收集到子进程的结束状态信息(子进程pid,退出状态,运行时间等)。父进程需要调用 wait/waitpid来获取这些信息。父进程收集这些信息后这些信息才会释放。

linux下新进程的创建可以由fork来产生新的子进程。然后根据fork的返回值(小于0,等于0,大于0)判断是fork出错,子进程还是父进程。通常情况下,父进程需要在子进程任务结束退出后做“善后”,也就是一些资源清理工作。子进程退出时会把打开的文件句柄,内存占用,打开的资源进行释放,但是不会清理进程控制块PCB信息。

孤儿进程:

父进程早于子进程退出时候子进程还在运行,子进程会成为孤儿进程。linux会对孤儿进程的处理,把孤儿进程的父进程设为1,也就是由init进程来托管。init进程负责子进程退出后的善后清理工作。

僵尸进程:

子进程退出后留下的进程信息没有被收集,会导致占用的进程控制块PCB不被释放,形成僵尸进程。进程已经死去,但是进程资源没有被释放掉。

问题及危害

如果系统中存在大量的僵尸进程,他们的进程号就会一直被占用,但是系统所能使用的进程号是有限的,系统将因为没有可用的进程号而导致系统不能产生新的进程.。

孤儿进程的资源收集由init进程负责,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会处理它的一切善后工作。因此孤儿进程并不会有什么危害。

任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个 子进程在

你可能感兴趣的:(linux如何杀掉孤儿进程)