僵尸进程的基础学习

1、概念

        僵尸进程指的是处于僵尸态的进程,这种进程无法进行调度,但其所占用的系统资源并未被释放。僵尸态是进程生命周期的必经阶段,是无法避免的,但为了节约系统资源,应尽快清理腾出僵尸态进程所占用的内存资源。

2、产生的原因

        当一个程序的代码流程从main函数返回后,进程就结束了,但此时不能立即退出,因为还需要向其父进程汇报执行的结果和死亡的原因,又因为已无法被调度,因此进程只能以一种被动的姿态躺倒,等待其创建者(父进程)前来获取其执行结果和死亡原因。

通过下列程序可查看僵尸进程:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc,char *argv[])
{
    pid_t pid=fork();
    if (pid==0)
    {
        printf("子进程\n");
        //子进程退出变僵尸
        return 0;
    }
    else
    {
        //父进程不退出
        pause();
    }
    return 0;
}

结果:

使用命令:ps ajx        查看进程状态

3、释放僵尸态

  •  父进程直接退出
  • 子进程等待父进程对其执行wait()/waitpid()

        释放对应僵尸子进程的系统资源

        获取对应僵尸子进程的退出状态

        阻塞父进程(可选)

示例代码:

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

int main(int argc,char *argv[])
{
    pid_t pid=fork();
    if (pid==0)
    {
        printf("子进程\n");
        return 0;
    }
    else
    {
        wait(NULL);           //父进程调用wait()释放子进程资源     
        pause();
        exit(0);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

biubiuboomy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值