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