local $SIG{'CHLD'} = sub { print "dead child\n"; $timeout=0 };
####
local $SIG{'CHLD'} = sub { $timeout=0 };
####
#!/usr/bin/perl
use strict;
use warnings;
my $timeout = 10;
my $parent_pid = $$;
my $child_pid = fork();
die "Can't fork() : $!\n" unless defined $child_pid;
if ($child_pid){
# parent
eval {
local $SIG{ALRM} = sub { die "timed-out\n" };
alarm $timeout;
if (waitpid($child_pid, 0) > 0){
my ($rc, $sig, $core) = ($? >> 8, $? & 127, $? & 128);
if ($core){
print "$child_pid dumped core\n";
}elsif($sig == 9){
print "$child_pid was murdered!\n";
}else{
print "$child_pid returned $rc";
print ($sig?" after receiving signal $sig":"\n");
}
}else{
print "$child_pid... um... disappeared...\n";
}
alarm 0;
};
if($@ eq "timed-out\n"){
print "$child_pid... parent got bored waiting for it...\n";
}
}else{
# child
print "child $$ is running...\n";
my $ret = system("sleep 20");
exit $ret;
}