Linux——僵死进程

1.僵死进程产生的原因或者条件?

当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程。

  当一个进程结束时,进程实体先被释放,因为PCB中的exit_code记录进程的退出码,只有当进程的退出码被父进程获取之后,进程的PCB才会被释放。

  而在父进程获取它的退出码之前,它就叫僵死进程

2.观察僵死进程

观察如下代码,未处理僵死进程

在后台运行该程序,并用ps观察

 此时会出现僵死进程

3.僵死进程的危害?

  如果父进程不调用wait/waitpid的话, 那么保留的那段信息就不会释放,其进程号会一定被占用,但是系统所能使用的进程号是有限的,如果产生了大量的僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。

4.如何去处理僵死进程

(1)父进程先结束(子进程会变成孤儿进程,孤儿进程会被收养(红帽子是init(pid==1)收养孤儿进程,Unbuntu是操作系统指定了一个进程));

父进程先于子进程结束,子进程就会被收养,"父进程"就会获取退出码;(调用wait);

收养孤儿进程,一定调用waite(就是获取退出码),获取了退出码,操作系统就会把pcd删掉,不会出现僵死进程。

(2)父进程调用wait()方法获取子进程的退出码

man  wait

else//父进程
 {
 s="parent";
 n=7;
 int val;
 wait(&val);
 printf("val=%d\n",val);
 }

其实两种处理僵死进程的方法的本质是一样的,都调用了wait方法;

但是两种方法都有区别:就是父进程调用wait会阻塞,等子进程执行完之后,父进程才会 去执行;

5.子进程的退出码

man  2  wait

WIFEXITED:正常退出的状态;

WEXITSTATUS:获取退出码;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值