#!/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; sleep 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...