- 论坛徽章:
- 0
|
程序是用来读取网页数据的,当网页反应比较慢,则不再等待,重新读取一遍。
我用了管道来实现进程通信,子进程进行网页的读取,父进程判断状态。父进程等待子进程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 |
|