Hi, Brandon, thanks for the explanation.
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.) 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? What I came up now is that changed the previous script (called async.pl6) and added a line: signal(SIGINT).tap( { say "Thank you for your attention"; $proc.kill } ); as below: use v6; my $proc = Proc::Async.new($*EXECUTABLE, "-e", "sleep 20000; say 'done'"); $proc.stdout.tap: -> $s { print $s }; my $promise = $proc.start; signal(SIGINT).tap( { say "Thank you for your attention"; $proc.kill } ); await $promise; Gabor