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

This is probably a POSIX-only feature, but I might be wrong - you probably won't see signals at all on other systems. If you do happen to be in a Unixy environment -- Linux, Solaris, *BSD, et al. -- the following should probably do what you want:

#!/usr/bin/perl use POSIX qw{:signal_h}; if (system('for a in 1 2 3 4; do echo $a>>/tmp/foobar; echo tick $a; s +leep 5; done') != 0) { my $sig_if_any = $? & 127; my $return_value = $? >> 8; print "child died: rv=$return_value, signal=$sig_if_any\n"; if (defined($sig_if_any) && ($sig_if_any == SIGINT)) { print "child was interrupted\n"; # ... do something appropriate ... } # ... cleanup ... } else { # ... do something with /tmp/foobar } ## ... run, and hit ctrl-c while it ticks...

The usual caveats about interpolating Perl variables into the strings passed to system() apply, of course :). Any monks more cross-platformy than me care to comment on the applicability of $? on other systems?