Commit ce7203b
Make KILL properly terminate all forked processes
If the process we executed with ltx_handle_exec() forks children these
did escape the attempt to kill these with ltx_handle_kill() because we
only killed the parent, the children were reparented to init and may
continue to run happily ever after. Since the parent process was killed
we wait() on it and we got stuck in the read() that gets rest of the log
from the pipe the stderr and stdout of the executed process is
redirected to. That is because the pipe stil has writers active as long
as any child process is active. If the main shell on the system was from
busybox this happend for any executed command since busybox forks and
executes in each case.
To fix it, we move the top process in the slot into a seprate process
group and the kill command kills a process group rather than a single
process. In order to make sure that the process is moved into right
process group right after the fork we move it both in the parent and in
the child.
We need it to move there in the parent in a case that subsequent command
is kill and terminate the process before it has a chance to run.
We need to make the move in the child because in case it runs before the
parent (ltx process) we need the process group right before we may
possibly fork any children.
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>1 parent 580e1f3 commit ce7203b
1 file changed
+4
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
735 | 735 | | |
736 | 736 | | |
737 | 737 | | |
| 738 | + | |
738 | 739 | | |
739 | 740 | | |
740 | 741 | | |
741 | 742 | | |
742 | 743 | | |
| 744 | + | |
| 745 | + | |
743 | 746 | | |
744 | 747 | | |
745 | 748 | | |
| |||
915 | 918 | | |
916 | 919 | | |
917 | 920 | | |
918 | | - | |
| 921 | + | |
919 | 922 | | |
920 | 923 | | |
921 | 924 | | |
| |||
0 commit comments