并发进行ping子网内各主机的代码,感兴趣的朋友可以参考下。
#!/usr/bin/perl
sub ping_a_host {
   my   $host   =   shift ;
   `ping  - i  1   - c  1   $host   2 >/ dev / null`  =~   / 0  packets rec /   ?   0   :   1 ;
}
my   %pid_to_host ;
my   %host_result ;
sub  wait_for_a_kid {
   my   $pid   =   wait ;
   return   0   if   $pid   <   0 ;
   my   $host   =   delete   $pid_to_host { $pid }
    or  warn ( " Why did I see $pid ($?)n " ) ,   next ;
   warn   " reaping $pid for $hostn " ;
   $host_result { $host }  =  $ ?   ?   0   :   1 ;
   1 ;
 }
my @hosts = map " 10.0.1.$_ " , " 001 " .. " 254 " ;
     for  ( @hosts ) {
      wait_for_a_kid()  if   keys   %pid_to_host   >   10 ;
       if  ( my   $pid   =   fork ) {
         # # parent does
         $pid_to_host { $pid }  =   $_ ;
         warn   " $pid is processing $_n " ;
      }  else  {  #  child does
        ## child does
         exit   ! ping_a_host( $_ );
      }
    }
     ## final reap:
     1   while  wait_for_a_kid();
     for  ( sort   keys   %host_result ) {
       print   " $_ is  " ,  ( $host_result { $_ }  ?   " good "   :   " bad " ) ,   " n " ;
    }