in reply to Re^2: Need Function for Timing out shell commands
in thread Need Function for Timing out shell commands

Using alarm to leave from `$cmd` prematurely leaves zombies as it jumps over the waitpid call inside that reaps the child process.
# untested! my $pid = open my $out, '-|', $cmd or die "Open failed: $!"; local $INT{CHLD} = sub {}; my $fileno = fileno $out; my $start = time; my $str = ''; my $timedout = 0; while (1) { my $v = ''; vec($v, $fileno, 1) = 1; if (select($v, undef, undef, 1) > 0) { if (vec($v, $fileno, 1)) { sysread $v, $str, 1024, length $v or last; } } if (time - $start > $timeout) { $timedout = 1; kill INT => $pid } close ($out); print "timed out: $timedout\noutput: $str\n";