#!/usr/bin/perl my $pid = fork; die "fork: $!\n" unless defined $pid; if( $pid ) { ## Parent print "Parent $$, child is $pid\n"; for( 1..5 ) { check_alive( $pid ); sleep 2; } } else { ## Child print "Child here, pid $$; sleeping 7 secs\n"; sleep 5; print "Child exiting\n"; exit 0; } print STDERR "Parent, waiting on child\n"; waitpid( $pid, 0 ) or warn "waitpid: $!\n"; check_alive( $pid ); exit 0; sub check_alive { my $pid = shift; my $kill = kill 0 => $pid or warn "kill: $!\n"; $kill = $kill == 1 ? "alive" : "$!"; print STDERR scalar localtime, ": kill sez $kill\n"; } __END__