http://www.perlmonks.org?node_id=1024584


in reply to How to make child to halt its execution and the parent to continue?

Reading your request again, my answer above probably isn't correct. It would allow the child process to run on, but the parent would die. That's usually what people want to do. If you really want the child to die, but the parent to live on through a <Control-C>, you'll want to ignore SIGINT in the parent. Your code, with SIGINT being ignored in the parent. Also changed so that the parent prints 'P' and the child prints 'C', so it's more clear. Since the parent is ignoring SIGINT, you'll have to kill this from another window, or try <Ctrl-\>, which sends SIGQUIT.
#!/usr/bin/perl use strict; use warnings; $|=1; my $pid = fork; die "Cannot fork: $!" unless defined $pid; unless($pid) { print "Child start\n"; my $end; local $SIG{INT} = sub { $end = 1 }; while(1){ sleep(1); until($end) { print "C"; sleep(1); } } exit 0; } # ingore the SIGINT in the parent $SIG{INT} = 'IGNORE'; print "Parent start\n"; for(my $i = 0; ;$i++){ sleep 1; print "P"; if($i == 10){ kill INT => $pid; } }
  • Comment on Re: How to make child to halt its execution and the parent to continue?
  • Download Code

Replies are listed 'Best First'.
Re^2: How to make child to halt its execution and the parent to continue?
by srlbharu (Acolyte) on Mar 22, 2013 at 05:23 UTC

    Hi Sir,

    This is the exact scenario what am I looking for. It is working exactly as I want.

    Thanks a lot, great relax for me :-)

    A small add on

    In the current example, parent is sending sigal after 10 seconds and then child was killed. Instead, Child needs to send a flag once its execution completes and once the flag is received in parent then it should send the Signal SIGINT to Child. As I know, to achieve this, we need to use IPCs like IPC::Sharable but pel 5.6 doesnot support it. Can you please let me know if any alternative way to do so?