#! perl -slw use strict; use Config; $|++; sub startKid { warn "starting kid\n"; my $pid = system 1, '/perl/bin/perl.exe trapSigs.pl' or die $!; sleep 0; warn "starting kid\n"; return $pid; } my $pid = startKid; for my $signo ( sort {$a<=>$b} split ' ', $Config{ sig_num } ) { warn "Skipping $signo\n\n" and next if $signo == 15 or $signo == 21; warn "Trying $signo\n"; warn "kill $signo, $pid returned: ", kill( $signo, $pid ), "\n"; for( 1 .. 3 ) { my $rv = kill 0, $pid; print "Attempt $_ at kill 0, $pid returned: ", $rv; last unless $rv; sleep 1; } if( kill 0, $pid ) { warn "signal no: $signo was non-fatal\n\n"; } else { warn "signal no: $signo was fatal\n\n"; $pid = startKid; warn "Restarted kid: $pid\n"; sleep 1; } } #### #! perl -slw use strict; use Config; print <>; close STDIN; my @sigs = split ' ', $Config{ sig_name }; shift @sigs; for ( @sigs ) { warn "Installing signal handler for $_\n"; eval qq[\$SIG{ $_ } = sub{ warn "Signal $_ received\n"; } ]; } my $count; while( 1 ) { $count += 1 for 1.. 1e6; warn $count; sleep 3; }