构造僵尸进程

僵尸进程是指在父进程退出后,子进程死亡但信息未被父进程接收的状态。它们在进程表中占用资源,可能导致系统无法分配新的进程号。通过`ps aux | grep 'Z'`可以检查僵尸进程。解决方法包括杀死父进程,让init接管并清理。本文将探讨如何用C语言构造僵尸进程。

解释:

僵尸进程是指的父进程已经退出,而该进程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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值