僵尸进程与孤儿进程
僵尸进程与孤儿进程都是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两次
世界最优美的情书