Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: Stopping subprocesses

by rowdog (Curate)
on Aug 25, 2010 at 23:26 UTC ( #857342=note: print w/ replies, xml ) Need Help??


in reply to Stopping subprocesses

What I really want to do is call B from another Perl script A, and A kills B (with system("kill PID") or whatever), thereby killing C as well.

One way to do that is to localize the HUP signal handler and then send a HUP signal to your process group. You can have A do

{ local $SIG{HUP} = 'IGNORE'; kill HUP => -$$; }

I've attached a proof of concept demo. Sorry there's no backport, I got lazy once I had it working.

a.pl
#!/opt/perl/bin/perl use 5.012; use warnings; say "A start"; my $pid; unless ( $pid = fork ) { die "cannot fork: $!" unless defined $pid; system("./b.pl"); sleep 30; exit; } sleep 2; say "A sending kill HUP -$$"; { local $SIG{HUP} = 'IGNORE'; kill HUP => -$$; } say "A waiting for lost children"; while (1) { my $kid = waitpid -1, 0; $kid == -1 and last; say "A reaped child $kid"; } say "A end";
b.pl
#!/opt/perl/bin/perl use 5.012; use warnings; say " B start"; my $pid; unless ($pid = fork) { die "cannot fork: $!" unless defined $pid; system("./c.pl"); sleep 30; exit; } say " B waiting on lost children"; while (1) { my $kid = waitpid -1, 0; $kid == -1 and last; say " B reaped child $kid"; } sleep 30; say " B end";
c.pl
#!/opt/perl/bin/perl use 5.012; use warnings; say " C start"; sleep 30; say " C exit";
output
$ ./a.pl A start B start B waiting on lost children C start A sending kill HUP -20682 A waiting for lost children A reaped child 20683 A end


Comment on Re: Stopping subprocesses
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (13)
As of 2015-07-02 22:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (45 votes), past polls