I'm desperately trying to get timeouts to work and came up with this test code:

use Sys::SigAction qw( set_sig_handler ); eval { my $h = set_sig_handler( 'ALRM' ,sub { die "TIMEOUT\n"; }, { mask=>[ 'ALRM' ], safe=>1, }); eval { alarm 3; $opened= open my $check, '-|', 'sleep 60'; if ($opened) { # slurp its output $line= do { local $/; <$check>; }; $exit_code= $!+0; $closed= close $check; } alarm 0; }; alarm 0; die $@ if $@; }; alarm 0; print $@;
Of course I can't really ready something from a "sleep" command, But I expected this to return after 3 seconds with a "Timeout". Instead I have to wait 60 seconds, so the full sleep-time.

I also tried a different command than "sleep" like, for example, a long running "find" command but still the sleep does not die.

What am I doing wrong or what do I misunderstand?


In reply to trying to get timeout to work by Skeeve

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":