+ -
当前位置:首页 → 问答吧 → 为什么这段代码的子进程不会成为僵尸进程呢?

为什么这段代码的子进程不会成为僵尸进程呢?

时间:2011-01-03

来源:互联网

  1. #!/usr/bin/perl -w
  2. use strict;

  3. print "father program:$$\n";
  4. defined(my $pid = fork) or die "can not fork $!";
  5. unless($pid){ # child
  6.     print "child $$\n";
  7.     exit(0);#子进程结束了
  8. }
  9. else{
  10.     print "father program: $$ (child:$pid)\n";
  11.     sleep(60);
  12.     #waitpid($pid,0); #父进程没有等待
  13. }
复制代码
根据僵尸进程的定义:一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程.
我通过ps -ef | grep defunc来找僵尸,结果没有。也通过ps -el来查看状态为Z的进程,结果也没有。那是为什么呢?是linux自己自动优化了吗?

作者: xiaozhu8766   发布时间: 2011-01-03

Linux 下只要把 SIGCHLD 忽略就可以了。
忽略后内核会回收的。

作者: flw   发布时间: 2011-01-03

回复 flw


    但上面的代码没有忽略sigchld这个信号啊

作者: xiaozhu8766   发布时间: 2011-01-04