in reply to Re: fork - alarm - output
in thread fork - alarm - output

I want to kill the process if it is not done in X amount of seconds.

Replies are listed 'Best First'.
Re^3: fork - alarm - output
by BrowserUk (Patriarch) on Jun 08, 2010 at 14:37 UTC

    Isn't this just easier?

    #! perl -slw use strict; my $pid = open IN, '-|', qq[ perl -E"say scalar localtime, sleep 1 for 1.. $ARGV[0]" ] or die $!; eval { local $SIG{ ALRM } = sub { kill -9, $pid; warn 'timeout'; }; alarm 5; waitpid $pid, 0; alarm 0; }; while( <IN> ){ print; } __END__ c:\test>junk 3 Tue Jun 8 15:33:04 20101 Tue Jun 8 15:33:05 20101 Tue Jun 8 15:33:06 20101 c:\test>junk 4 Tue Jun 8 15:33:09 20101 Tue Jun 8 15:33:10 20101 Tue Jun 8 15:33:11 20101 Tue Jun 8 15:33:12 20101 c:\test>junk 5 timeout at C:\test\junk.pl line 11.
    ol>

    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.
      Only if the child prints less than a pipe's buffer's worth of information (64k?). That's very small these days.
        Only if the child prints less than a pipe's buffer's worth

        That (conservatively), probably covers 85% of the uses of such code. Are you telling me that you don't see a relatively simple modification to cater for the rest?

        I mean without resorting to forks & execs and no-blocks and selects and events&globals, state-driven spaghetti code?


        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.