linux中僵尸状态相关分析

本文介绍了如何使用C++的fork()函数创建僵尸进程,并通过监控代码实时检测僵尸状态。实验中展示了父进程不干预子进程运行,子进程定期打印并最终被杀死,进入僵尸状态的过程。监控脚本用于检测并理解僵尸进程的生命周期。
摘要由CSDN通过智能技术生成

僵尸状态:Z

z:如果没有人检测或回收进程,改进程退出就进入Z
检测或回收由父进程进行操作

实验代码:

#include<iostream>      
#include<unistd.h>      
using namespace std;      
      
int main()      
{      
  pid_t id = fork();      
  if(id == 0)      
  {      
    //child      
    while(true)      
    {      
      cout<<"i am child, running!"<<endl;      
      sleep(2);      
    }      
  }      
  else{      
    //parent      
    cout << "father do nothing!" <<endl;       
    sleep(50);                                                                                     
  }    
  return 0;    
}    

我们用代码来进行:
父进程什么都不做
子进程每隔两秒进行一次打印
我们在五十秒之内将子进程干掉
此时的父进程什么都不管,(他还要睡眠50秒)
此时的子进程就是:已经死了,但是没有被别人回收,就进入了僵尸状态

监控代码:

为了让我们能够更好的检测这些,需要一段检测代码

while :; do ps axj | head -1 && ps ajx | grep a.out | grep -v grep; sleep 1; echo “#################################”; done

不断的进行循环,执行这个命令,grep找这个命令,同时头部拿出来,每隔一秒检测一次,然后用"###"进行分割

实验开始:

在这里插入图片描述
我们创建三个窗口
第一个检测状态
第二个kill进程
第三个启动进程a.out
在这里插入图片描述

在这里插入图片描述
此时我们的子进程就进入了僵尸状态
并且这个子进程后面会有一个defunct

延伸:
想要停止最左边和最右边的两个窗口
ctrl+c 就可以了

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值