From 3c74891fcd68d37c1629943f703ac70428e3ce9f Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 13 Apr 2018 12:09:34 +0100 Subject: 42630: Improve process group handling in pipelines. If process group leader exits, allow a newly forked process to become process leader. If a foreground job, reattach the shell to the terminal until that happens. Unblock signals when reading output for command subsitution so that we can do this reattaching immediately. --- Src/signals.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'Src/signals.c') diff --git a/Src/signals.c b/Src/signals.c index 94f379e72..2a6aa3f24 100644 --- a/Src/signals.c +++ b/Src/signals.c @@ -537,6 +537,19 @@ wait_for_processes(void) #else update_process(pn, status); #endif + if (pn->pid == jn->gleader) { + jn->gleader = 0; + if (!(jn->stat & STAT_NOSTTY)) { + /* + * This PID was in control of the terminal; + * reclaim terminal now it has exited. + * It's still possible some future forked + * process of this job will become group + * leader, however. + */ + attachtty(mypgrp); + } + } } update_job(jn); } else if (findproc(pid, &jn, &pn, 1)) { -- cgit 1.4.1