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 |