about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2022-04-29 20:25:53 -0700
committerBart Schaefer <schaefer@zsh.org>2022-04-29 20:25:53 -0700
commit15bf8ace168a86d0fae90b10e9f706baddd4c0bf (patch)
tree311f341dec249d4f6accccc8e56cebeb4121a02f /Src
parent8eccdc5cb7311676820db5b03895f64748f33636 (diff)
downloadzsh-15bf8ace168a86d0fae90b10e9f706baddd4c0bf.tar.gz
zsh-15bf8ace168a86d0fae90b10e9f706baddd4c0bf.tar.xz
zsh-15bf8ace168a86d0fae90b10e9f706baddd4c0bf.zip
50134: Tweak process group handling to prevent unkillable pipelines
In some cases the process group leader of the forked-left side of a
pipe needs to be set to the pipe process PID rather than to the group
leader PID returned by entersubsh().
Diffstat (limited to 'Src')
-rw-r--r--Src/jobs.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/Src/jobs.c b/Src/jobs.c
index af0a1233d..85d4c4d1f 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -1476,7 +1476,10 @@ addproc(pid_t pid, char *text, int aux, struct timeval *bgtime,
 	 * set it for that, too.
 	 */
 	if (gleader != -1) {
-	    jobtab[thisjob].gleader = gleader;
+	    if (jobtab[thisjob].stat & STAT_CURSH)
+		jobtab[thisjob].gleader = gleader;
+	    else
+		jobtab[thisjob].gleader = pid;
 	    if (list_pipe_job_used != -1)
 		jobtab[list_pipe_job_used].gleader = gleader;
 	    /*