http://www.perlmonks.org?node_id=964542


in reply to trying to get timeout to work

It's because of the eval. Throw this in after you declare $h:

local $SIG{ALRM};
And see what happens.

Replies are listed 'Best First'.
Re^2: trying to get timeout to work
by Eliya (Vicar) on Apr 11, 2012 at 14:20 UTC

    The problem with this is that the alarm signal will then simply kill the script... (which is the default action for SIGALRM)

      Yes, but it will happen in the requested 3 seconds. If you want a non-fatal handler:

      local $SIG{ALRM} = sub { print STDERR "hey\n" };
      Ie, there is a difference in behaviour between that and set_sig_handler(). Whoops, no there isn't, but adding STDERR reporting does shed some light on when the alarm fires...

        Have you tried it?   AFAICT, this still doesn't do what the OP wants.

        Instead of the script getting killed, when the alarm fires, it now prints "hey" to STDERR, and then still goes to wait 60 seconds until the suprocess completes by itself.