孤儿进程与僵尸进程[转]

  • 来源:本站
  • 发布时间:2019-08-13
  • 151已阅读
您现在的位置:首页 >> 现代文学 >> 文章
简介 from:https:///Anker/p/、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。 今天被人问到什么是孤儿进程和僵尸

	孤儿进程与僵尸进程[转]

from:https:///Anker/p/、前言  之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。 今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。

晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。

2、基本概念  我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。 3、问题及危害么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程.此即为僵尸进程的危害,应当避免。

,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。 每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。

这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。

这是每个子进程在结束时都要经过的阶段。 如果子进程在exit()之后,父进程没有来得及处理,这时用ps命令就能看到子进程的状态是Z。 如果父进程能及时处理,可能用ps命令就来不及看到子进程的僵尸状态,但这并不等于子进程不经过僵尸状态。 如果父进程在子进程结束之前退出,则子进程将由init接管。 init将会以父进程的身份对僵尸状态的子进程进行处理。 3、孤儿进程和僵尸进程测试####=(pidperror(exit((pid==printf(printf(printf(sleep(printf(printf(printf(sleep(printf(}测试结果如下:僵尸进程测试程序如下所示:####=(pidperror(exit((pid==printf(exit(printf(sleep(system(printf(}测试结果如下所示:####(pid=(pidperror(exit((pid==printf(exit(sleep(}程序测试结果如下所示:4、僵尸进程解决办法  子进程退出时向父进程发送SIGCHILD信号,父进程处理#####_child(pid=(pidperror(exit((pid==printf(exit(printf(sleep(system(printf(sig_child(((pid=waitpid(-,stat,WNOHANG))printf(}测试结果如下所示:####=(pidperror(exit((pid==printf(pid=(pidperror(exit((pidprintf(exit(sleep(printf(exit((waitpid(pid,NULL,)!=perror(exit(exit(}测试结果如下图所示:5、参考资料《unix环境高级编程》第八章冷静思考,勇敢面对,把握未来!postedon2018-09-0319:53阅读(53)所属分类:。