in reply to Re^2: Cannot catch ALRM signal for timeout
in thread Cannot catch ALRM signal for timeout

open(WORKER,"yes >/dev/null |"); eval{ local $SIG{ALRM} = sub { die "alarm\n" }; alarm 1; $str = <WORKER>; alarm 0; }; if ($@) { print "timeout\n"; close WORKER; return 0; }
for me, this prints "timeout" and hangs on close.
what happens if you run this code ?

UPDATE: the eof function also hangs on pipes.

Replies are listed 'Best First'.
Re^4: Cannot catch ALRM signal for timeout
by Magice (Novice) on Dec 08, 2009 at 13:24 UTC
    Thank you for your code, it behaves as you expected (print out "timeout\n" and hang). But it does not exactly solve the problem. When I tried earlier on mine, it does not even print out "timeout\n" equivalent :(.
      well another similar problem is that eof also waits for input(actually reads input), so you would have to also alarm on eof or try another approach like almut suggested.