美文网首页
僵尸进程的存在意义、危害及避免方法

僵尸进程的存在意义、危害及避免方法

作者: 踩在浪花上00 | 来源:发表于2016-11-08 14:03 被阅读0次

僵尸进程并不可怕,可怕的是量大。僵尸进程是有它存在的意义的。以下解释摘自百度百科:

由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 那么会不会因为父进程太忙来不及wait子进程,或者说不知道 子进程什么时候结束,而丢失子进程结束时的状态信息呢? 不会。因为UNⅨ提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是: 在每个进程退出的时候,内核释

放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the

termination status of the process,运行时间the amount of CPU time taken by

the process等)。直到父进程通过wait / waitpid来取时才释放. 但这样就导致了问题,如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

僵尸进程的避免:

⒈父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。

⒉ 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。

⒊ 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD,SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号。

⒋ 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收 还要自己做。

相关文章

  • 僵尸进程的存在意义、危害及避免方法

    僵尸进程并不可怕,可怕的是量大。僵尸进程是有它存在的意义的。以下解释摘自百度百科: 由于子进程的结束和父进程的运行...

  • 如何杀死僵尸进程?

    僵尸进程定义?查看僵尸进程,利用命令ps,可以看到有标记为Z(zombie)的进程就是僵尸进程。 僵尸进程的危害?...

  • 为何要fork()两次来避免产生僵尸进程?

    当我们只fork()一次后,存在父进程和子进程。这时有两种方法来避免产生僵尸进程: 目前先考虑子进程先于父进程结束...

  • 示例说明僵尸进程的危害及解决方法

    简述 首先简要说明下僵尸进程和孤儿进程的概念(前提都是父进程调用fork产生子进程) 僵尸进程:子进程终止,父进程...

  • 常用编程惯例

    获取2字节整数的高8位和低8位 拷贝字符串 避免僵尸进程 在父进程中,通过忽略SIGCHLD即可避免僵尸进程: 封...

  • 进程

    孤儿进程:父进程退出的子进程。会被init进程(进程号为1)收养,并负责其状态收集。不会产生危害。僵尸进程:退出后...

  • Linux 避免僵尸进程

    1.交给内核释放 signal(SIGCHLD,SIG_IGN); 2.父进程处理 wait(NULL); wai...

  • 僵尸进程处理方案

    僵尸进程介绍 Z(zombie)-僵尸进程(子进程终止,父进程没有wait子进程) 僵尸进程产生原因 僵尸进程是当...

  • Linux下僵尸程序查杀

    查: 或者如下命令可以查看存在多少僵尸进程 杀:

  • 关于如何避免僵尸进程

    1、父进程调用wait()或waitpid()函数 2、将父进程杀死或者父进程终止了,让僵尸子进程变成孤儿进程,将...

网友评论

      本文标题:僵尸进程的存在意义、危害及避免方法

      本文链接:https://www.haomeiwen.com/subject/dbvauttx.html