僵尸进程与孤儿进程

僵尸进程与孤儿进程都是linux中的理论

在unix/linux中,正常情况下,子进程是通过父进程创建的。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态

1.孤儿进程

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

2.僵尸进程

一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程

3.问题及危害

孤儿进程会被init进程回收,因此孤儿进程并不会有什么危害。

任何一个子进程在exit()之后,并非马上就消失掉,而是留下一个僵尸进程的数据结构。如果僵尸进程过多,他们会占用cpu及系统进程表中的资源,这样是不好的

4.僵尸进程的解决方法

1)毙掉产生大量僵尸进程的父进程

2)通过信号机制

子进程退出时向父进程发送SIGGHILD信号,父进程处理SIGGHILD信号。在信号处理函数中调用wait进程处理僵尸进程

3)fork两次

 

posted @ 2019-03-21 08:06  徐大  阅读(161)  评论(0编辑  收藏  举报