孤儿进程和僵尸进程

2018-11-04  本文已影响0人  小码弟

孤儿进程

父进程退出,它的子进程就会成为孤儿进程,所有的孤儿进程都会被init接管,释放它们占用的系统资源。孤儿进程没有实质性危害。

僵尸进程

进程通过fork创建子进程,如果子进程退出,父进程没有调用waitwaitpid等系统函数获取子进程的状态,那么子进程的描述符、进程号就会一直被占用,成为僵尸进程。
很明显,僵尸进程会占用系统资源,过多的僵尸进程会导致进程号耗尽,无法创建新进程。

相关机制:子进程退出后,系统会回收文件、内存等资源,但不会回收进程号,它要等到父进程调用wait后才会被释放。

解决方法

子进程退出后,发送SIGCHILD信号,父进程在信号处理函数中调用wait接受子进程的状态。或者可行的话,直接杀死父进程,使子进程成为孤儿进程,由init进程接管。

总结

父子进程好比是父子,init进程好比是社保局。
当父亲意外身亡时,儿子自动成为孤儿(孤儿进程),那么自然社保局(init进程)就会来安置这些孤儿。
而如果遇到不负责的父亲,对孩子不管不顾,那么社保局可以对这个父亲进行劝解,加强对孩子的关心(wait, waitpid),或者冥顽不灵的,直接处理(kill it)它的孩子由于成为孤儿而依法获得安置。

上一篇 下一篇

猜你喜欢

热点阅读