Script to ping multiple hosts in parallel
This commit is contained in:
parent
4ebc2b2a57
commit
bbb0b7f6dd
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/perl
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use IO::Select;
|
||||
|
||||
my $s = IO::Select->new();
|
||||
|
||||
my %fh2host;
|
||||
my $len = 0;
|
||||
for my $host (@ARGV) {
|
||||
open(my $fh, '-|', 'ping', $host) or die "cannot exec ping: $!";
|
||||
$s->add($fh);
|
||||
$fh2host{$fh} = $host;
|
||||
$len = length($host) if length($host) > $len;
|
||||
}
|
||||
my %state;
|
||||
|
||||
for (;;) {
|
||||
my @ready = $s->can_read(1);
|
||||
for my $fh (@ready) {
|
||||
my $msg = <$fh>;
|
||||
chomp($msg);
|
||||
my $host = $fh2host{$fh};
|
||||
$state{$host} = $msg;
|
||||
}
|
||||
print "\n\n";
|
||||
for my $host (@ARGV) {
|
||||
printf("%-*s : %s\n", $len, $host, $state{$host});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue