http://hi.baidu.com/zhujian0805/blog/item/75f50c09412791a72eddd450.html
使用pipe在 perl 父子进程共享数据
使用pipe在 perl 父子进程共享数据 实例
-------------------------------------------------------------------------------------------------------------------
#!/usr/bin/perl
use Net::Ping;
#本函数用来将不能ping同的节点打印到pipe
sub ping_action(){
$p = Net::Ping->new();
if(!$p->ping($_[0],3)){
print $_[0];
}
}
@nodename=("hostname1","hostname2","hostname3");
for(@nodename){
#设置管道
pipe(RD,WT) or die "Can't open pipe: $!\n";
$node = $_;
#创建子进程
if(fork == 0){
close RD;
select WT; $| = 1;
#数据写入管道
&ping_action($node);
exit 0;
}else{
close WT;
while(){
#在父进程中从管道读取子进程写的数据数据
push @nodes,$_;
}
}
}
#最后在在所有进程结束后吧结果打印出来
grep { print $_; } @nodes;
阅读(883) | 评论(0) | 转发(1) |