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

I have tried that also (print out some string in the if checking for timeout), but it does not print anything, so I believe that it does not catch the signal.
  • Comment on Re^2: Cannot catch ALRM signal for timeout

Replies are listed 'Best First'.
Re^3: Cannot catch ALRM signal for timeout
by Fox (Pilgrim) on Dec 08, 2009 at 13:18 UTC
    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.
      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.