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

How to tell Child wait till Parent kill it

by gjoshi (Sexton)
on Nov 19, 2015 at 06:21 UTC ( [id://1148092]=perlquestion: print w/replies, xml ) Need Help??

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

Hi all

I need child to wait till it parent tell it to kill it. My requirement is:

I have parent which forks processes and all those child process has to do something and update database. Parent will check the status of the database and then decide whether to kill the child or not.

Any advice how to do it? I am not able to figure out the wait in child what it should be?

  • Comment on How to tell Child wait till Parent kill it

Replies are listed 'Best First'.
Re: How to tell Child wait till Parent kill it
by blindluke (Hermit) on Nov 19, 2015 at 07:47 UTC

    In the child process, set up a signal handler. A standard kill sends out the TERM signal, but you can wait for any signal, and react accordingly. Here's an example:

    use strict; use warnings; $SIG{HUP} = \&sighup_handler; $SIG{TERM} = \&sigterm_handler; sleep(3600); sub sigterm_handler { die "Caught TERM, will not do anything!"; } sub sighup_handler { # commit changes to the database and exit }

    - Luke

      Hi Luke, I am not getting where in my code i have to do this and how to do this?
      $SIG{HUP} = \&sighup_handler; $SIG{TERM} = \&sigterm_handler; #----------------------------- MAIN ---------------------------- print "I am the only process.\n"; my @children_pids; for my $count (1..3){ my $child_pid = fork(); print "PID: $child_pid \n"; if ($child_pid) { # If I have a child PID, then I must be the + parent push @children_pids, $child_pid; } else { # I am the child my $Child_PID = $$; print "CHILD's PID is: $Child_PID \n"; #doing something # writing into DB sleep $wait_time; } } print "\n ----- Main DB ---- \n"; foreach my $child (@children_pids) { print "Parent: Waiting on $child\n"; #check DB stats #send kill signal waitpid($child, 0); }
      thanks --girija

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2024-04-19 21:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found