Beefy Boxes and Bandwidth Generously Provided by pair Networks Joe
"be consistent"
 
PerlMonks  

children don't see ^C ??

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

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.

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 18: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
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.