+ -
当前位置:首页 → 问答吧 → 为什么子进程无法被kill掉呢?

为什么子进程无法被kill掉呢?

时间:2010-10-27

来源:互联网

程序是用来读取网页数据的,当网页反应比较慢,则不再等待,重新读取一遍。

我用了管道来实现进程通信,子进程进行网页的读取,父进程判断状态。父进程等待子进程5秒,如果5秒还没有读取完成,那么结束子进程。

但是如果子进程没有完成读取工作,kill $pid;就不发挥作用,也就是说父进程无法强行终止子进程,请问这是为什么呢?

#!/usr/bin/perl
use strict;
use POSIX;
use HTML::TreeBuilder 3;
#gethtml

sub getHtmlContent {
    use LWP::Simple;
my ($url) = @_;
my $content = get($url);
#print($content);
return  $content
}

pipe (INPUT, OUTPUT);

my $i = 0;
do{
     my $pid=fork();

     if (!defined($pid)) {
        print "Error in fork: $!";
        exit 1;
         }

     #father
     if($pid!=0)
         {
         my $fid=getppid();
         close (OUTPUT);
         sleep 5;
         print  <INPUT>;
         kill $pid;
         $i=3;

         }
     #child
     else
         {

         my $temp="";
         $htmlcontent="";
         close (INPUT);
         $temp=&getHtmlContent("http://www.chinaunix.net");
         print OUTPUT ($temp);

         #exit(1);
         }

     sleep 1;
     $i++;
}
while($i<2 && $flag==1);
exit 0

作者: hamas   发布时间: 2010-10-27

本帖最后由 zhlong8 于 2010-10-27 12:19 编辑

father 里面 print <INPUT> 是个 list context 吧?

作者: zhlong8   发布时间: 2010-10-27

热门下载

更多