use POSIX qw/WNOHANG/; ## ... $SIG{ CHLD } = sub { while ( waitpid( -1, WNOHANG ) > 0 ) { ## what to do, empty here } }; ## fork down here #### #!/usr/bin/perl -w use strict; use POSIX qw/WNOHANG/; my $time = 5; $SIG{ CHLD } = sub { while ( ( my $x = waitpid( -1, WNOHANG ) ) > 0 ) { print "\tprocess '$x' got reaped.\n" } }; my @toDoList = ( 'ls -la', 'echo Yay!', 'date', 'perl -V', ); foreach my $doIt ( @toDoList ) { my $child = fork(); defined $child or die "Can not fork: $!"; if ( $child > 0 ) { ## parent print "Parent of $child sleeping for $time seconds . . .\n"; sleep( $time ); print "Parent of $child done sleeping!\n"; } else { ## child print "Child, going to do '$doIt'\n"; exec( "$doIt && echo '** Finished \"$doIt\" **'" ); } } print "\nDone.\n\n"; exit(0);