Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Re: SIGINT in system() with shell metachars

by andrewc (Acolyte)
on Jun 25, 2003 at 13:36 UTC ( [id://268848]=note: print w/replies, xml ) Need Help??


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?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://268848]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2024-04-20 15:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found