in reply to Re: SIGINT in system() with shell metachars
in thread SIGINT in system() with shell metachars

Perl's system() already ignores SIGINT and SIGQUIT, as well as Perl's backticks. The question is how to get the correct return value back from system().
  • Comment on Re: Re: SIGINT in system() with shell metachars

Replies are listed 'Best First'.
Re: Re: Re: SIGINT in system() with shell metachars
by chip (Curate) on Jun 25, 2003 at 14:33 UTC
    Ah, quite so. You are up against a fug/beature in the shell, i.e. that when the shells spawns kids killed by a signal, the shell doesn't exit with a signal-like exit status.

    I suggest using the 'trap' shell statement to generate a non-standard exit status from signal delivery. There are some timing quirks that may hit you if the child is doing things like saving and restoring tty modes, but otherwise it works (I just tested it on Linux):

    system(q[ trap 'exit 77' 2; foo | bar ]); if (($? >> 8) == 77) { wow_i_got_a_sigint(); }

    The shell's 'trap' statement is a handy feature, seldom used.

        -- Chip Salzenberg, Free-Floating Agent of Chaos