Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

children don't see ^C ??

by iza (Monk)
on Oct 10, 2001 at 21:20 UTC ( [id://118058]=perlquestion: print w/replies, xml ) Need Help??

iza has asked for the wisdom of the Perl Monks concerning the following question:

hi
i'm new to php so excuse me if the question sounds stupid
i have a main program that creates a few children (using Parallel::ForkManager)
what i want to do is detect when someone uses ^C (or any other way to interrupt the program, but i know ^C will be used more, that's why i focus on it)
so i read the perlman:perlipc, and now i use this line

 $SIG{INT} = \&catch_zap;

(along with the catch_zap function)
it works fine as long as children aren't running. When the children are here, i can press ^C and nothing happens - as long as they aren't finished

do i miss something really obvious here ? is there a way to catch an interrupt sinal anywhere in the code, even if i fork ?
thanx for any wanswer ... i'm stuck !

Replies are listed 'Best First'.
Re: children don't see ^C ??
by broquaint (Abbot) on Oct 10, 2001 at 22:02 UTC
    I think your problem is (apart from Freudian slips) is that ^C kills the currently running process, subsequently the children are free to go since they are different proccesses. The same thing will happen when anything else kills the parent process too. So you'll want to keep track of your children and then kill them in the signal handler, like so
    use strict; my @children = (); $SIG{INT} = sub { kill 15, @children if @children > 0; print STDERR "children sent TERM signal\n"; exit 1; }; if(my $pid = fork()) { push @children, $pid; print "forked off child $pid\n"; } else { print "in child process\n"; }
    You'll probably want to put some sleep()s in there to watch it at work, but I'm sure you get the gist of it.
    HTH

    broquaint

      i'll try this right now :))
      thank you very much, it helps a lot :))))
      it's too bad perl can't do anything for freudian slips tho .... ;]

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (2)
As of 2025-02-07 04:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Which URL do you most often use to access this site?












    Results (94 votes). Check out past polls.