perl多进程数量控制-信号或者判断pid是否存在
实例的功能就是多进程ping不同的主机,查看主机是否可连通。。试了一把。 1.通过子进程返回的CHLD信号 #!/usr/bin/perl -w 2. 通过判断子进程的pid是否存在 ? #!/usr/bin/perl -w use Net::Ping; use POSIX; $SIG{CHLD}='IGNORE'; my @ip; open IN,'ip.txt' or die'error'; ?@ip=<IN>; close(IN); my $total=$#ip+1; my $i; my %pid; for($i=0;$i<$total;$i++) ?{ ??? my @pids=keys %pid; ??? while($#pids >=4) ???? { ????????? foreach my $j(@pids) ?????????? { ????????????? delete $pid{$j} unless(kill 0 =>$j); ?????????? } ???????? @pids=keys %pid; ???? } ?? my $pid=fork(); ?? if($pid) ???? { ????????? $pid{$pid}=1; ???? } ? else{ ?????? my $p=Net::Ping->new(); ?????? $ip[$i]=~s/n//g; ????? if($p->ping($ip[$i],5)) ?????? { ????????? print "$ip[$i] is reachablen"; ?????? } ????? else{ ????????? print "$ip[$i] is noreachn"; ?????? } ????? $p->close(); ????? exit 0; ????? } ?} my @left=keys %pid; while($#left != -1) ?{ ?? foreach my $k(@left) ?? { ????? delete $pid{$k} unless(kill 0 =>$k); ?? } ? @left=keys %pid; } ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |