summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--term-utils/script.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/term-utils/script.c b/term-utils/script.c
index 6d5ddd84a..7692f91e2 100644
--- a/term-utils/script.c
+++ b/term-utils/script.c
@@ -477,10 +477,15 @@ static void handle_signal(struct script_control *ctl, int fd)
switch (info.ssi_signo) {
case SIGCHLD:
- DBG(SIGNAL, ul_debug(" get signal SIGCHLD"));
- if (info.ssi_code == CLD_EXITED) {
+ DBG(SIGNAL, ul_debug(" get signal SIGCHLD [ssi_code=%d, ssi_status=%d]",
+ info.ssi_code, info.ssi_status));
+ if (info.ssi_code == CLD_EXITED
+ || info.ssi_code == CLD_KILLED
+ || info.ssi_code == CLD_DUMPED) {
wait_for_child(ctl, 0);
ctl->poll_timeout = 10;
+
+ /* In case of ssi_code is CLD_TRAPPED, CLD_STOPPED, or CLD_CONTINUED */
} else if (info.ssi_status == SIGSTOP && ctl->child) {
DBG(SIGNAL, ul_debug(" child stop by SIGSTOP -- stop parent too"));
kill(getpid(), SIGSTOP);
@@ -508,6 +513,7 @@ static void handle_signal(struct script_control *ctl, int fd)
default:
abort();
}
+ DBG(SIGNAL, ul_debug("signal handle on FD %d done", fd));
}
static void do_io(struct script_control *ctl)