open( PROC, "| program_a" ); sleep $n; close PROC; #### open( PROC, "| command" ) #### $spid = open( SH, "| /bin/sh" ); select SH; $|++; print "program_a &\n"; $slept = 0; until ( $ps =~ m{\b$spid\s+$$\s+/bin/sh\b} && $ps =~ m{\b\d+\s+$spid\s+program_a\b} ) { sleep 1; $slept++; $ps = `/bin/ps -o pid -o ppid -o comm`; } if ($ps =~ m{\b(\d+)\s+$spid\s+sleep\s}) { $cpid = $1; sleep ($n-$slept) if ( $n>$slept ); print SH "kill -9 $cpid\n"; } else { print "Damn! Lost the kid.\n"; } close SH;