in reply to Re^2: Thread Safe alarms?
in thread Thread Safe alarms?

This is a somwhat simpler approach and is thread-safe:

#! perl -sw use strict; use threads; use threads::shared; our $T //= 5; my $pid :shared; my( $t ) = threads->create( sub{ my @input; $pid = open my $in, '-|', q[ perl -wle"$|++; print() and sleep 1 for 1.. 5" ] or die $!; push @input, $_ while <$in>; return @input; } ); sleep $T; kill 21, $pid; my @input = $t->join; print for @input; __END__ c:\test>junk82 -T=4 Terminating on signal SIGBREAK(21) 1 2 3 4 c:\test>junk82 -T=5 Terminating on signal SIGBREAK(21) 1 2 3 4 5 c:\test>junk82 -T=6 1 2 3 4 5

It does have a caveat that you may loose some output buffered by the child process, but is otherwise quite reliable and should work wherever threads do.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.