On Sat, Jul 15, 2017 at 10:23 AM, Gabor Szabo <szab...@gmail.com> wrote:
> If I understand correctly, then this means Ctrl-C sends a SIGINT to > both the main process I ran and the child process I created using > Proc::Async. When I run kill -2 PID it only sends the SIGINT to the > process I mentioned with PID. > (Which in my case was the process I ran.) > Yes. > Then here is the problem which is closer to our original problem. I > have another script that uses Proc::Async to launch the previous > process. So now I have a main process, that has a child process which > has a child process. > > use v6; > my $proc = Proc::Async.new($*EXECUTABLE, "async.pl6"); > $proc.stdout.tap: -> $s { print $s }; > my $promise = $proc.start; > sleep 10; > $proc.kill; > > The "kill" there kill the immediate child but leaves the grandchild > running. > > Is there a way to send a signal to all the processes created by that > Proc::Async.new and to their children as well? > Not currently; Proc::Async would need to expose process group functionality, so you could put the child in a new process group, let the grandchild inherit that process group, and use a variant of the 'kill' method to signal the whole process group instead of just the one child. You *might* be able to simulate this by using NativeCall to invoke setpgrp() in the child, and to invoke C's kill() in the parent with the negated process ID of the child (thus indicating its associates process group). You will also need to arrange to find out the child's pid, which also doesn't appear to be available via Proc::Async (sigh) so you may well need to have the child print that (again, if necessary, using NativeCall to access C's getpid()). This will all necessarily be POSIX specific; no chance of it working on Windows. -- brandon s allbery kf8nh sine nomine associates allber...@gmail.com ballb...@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net