构造僵尸进程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/justheretobe/article/details/53885219

解释:

僵尸进程是指的父进程已经退出,而该进程dead之后没有进程接受,就成为僵尸进程.(zombie)进程


产生原因:

每个Unix进程在进程表里都有一个进入点(entry),ps命令查看到的进程信息就存放在这里。子进程结束之后,内核会释放掉该进程占用的所有资源,但该进程的进程号、退出码、退出状态等信息还保留,指导其父进程接手并释放这些信息。

在UNIX 系统中,如果一个进程结束了,但父进程没有接受并释放进程号、退出码、退出状态等信息,则该进程变为僵尸进程。 


查看方式:

ps aux | grep 'Z'  

即可查看到系统中现有的僵尸进程。


僵尸进程对系统的影响:

僵尸进程对系统的影响在于过多的僵尸进程会导致系统无法分配新的可用进程号


如何处理僵尸进程:

杀死僵尸进程的父进程,则系统init进程会接手僵尸进程,负责清理。


如何构造僵尸进程:

c语言版

#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
        pid_t pids[13];  /*13个进程*/
        int i;

        for (i = 12; i >= 0; --i) {
                pids[i] = fork();
                if (pids[i] == 0) {
                        _exit(0);
                }
        }

        pause(); /*脚本暂停,父进程暂停,产生13个僵尸进程*/

/* 父进程waitpid方法,获取到僵尸进程exit之后的信息,则无僵尸进程产生
        for (i = 12; i >= 0; --i)
                waitpid(pids[i], NULL, 0);
*/
        return 0;
}




没有更多推荐了,返回首页