33 lines
609 B
Perl
Executable File
33 lines
609 B
Perl
Executable File
#!/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) {
|
|
no warnings 'uninitialized';
|
|
printf("%-*s : %s\n", $len, $host, $state{$host});
|
|
}
|
|
}
|