1.练习:在一个孤儿进程中创建十个僵尸进程

本文介绍了僵尸进程的概念及其产生的原因。僵尸进程是指子进程已结束但其父进程未对其进行清理的情况。文章通过一个C语言示例程序详细说明了如何产生僵尸进程,并提出了解决方案:父进程可以通过调用waitpid来避免子进程成为僵尸进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个僵尸进程是在父进程有机会用wait或waitpid收集它退出状态之前就终止的进程。

  子所以被称为僵尸进程是因为进程虽然结束了,但依然在进程表中存在。

子进程退出后分配给它的内存和资源都被释放,但它还是在内核进程表中保留一条记录,内核在父进程回收子进程的退出状态前一直保留它。

  当进程表中进程条目太多时,会影响性能,导致创建进程失败,系统崩溃等。

  fork或者exec函数创建了一个新进程,为了收集新进程的退出状态防止出现僵死进程(zombie process), 父进程应该调用waitpid等待子进程的终止,或者父进程退出,僵死进程也会被销毁掉。

代码中

当 i = n 则有 n个僵尸进程, 且它们的父进程ip都是  pid 因为,pid 的为子进程在创建之初就已经执行exit(0)所以即使是含有fork的循环中, 子进程也不会去创建新的子进程。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

int main(void)
{
    pid_t pid = fork();

    if(pid == 0)
    {   
    int i = 0;
    for(i = 0; i<10; i++)   
    {   
    pid_t pid = fork();
    if(!pid)
    {   

        exit(0);

    }   
    }   
    pause();
    }   
    else
            exit(0);
    
    return EXIT_SUCCESS;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值