diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2020-10-08 19:27:19 +0200 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2020-10-08 19:49:07 +0200 |
commit | 6aa4bd2ff5e70b2067baaed720c9e64b63f62767 (patch) | |
tree | 42e66f480649675fd878f25b627c7df5e5522963 | |
parent | 000315165df66f23519fd3b503197c9818562d90 (diff) | |
download | sdn-6aa4bd2ff5e70b2067baaed720c9e64b63f62767.tar.gz sdn-6aa4bd2ff5e70b2067baaed720c9e64b63f62767.tar.xz sdn-6aa4bd2ff5e70b2067baaed720c9e64b63f62767.zip |
When resuming a child, resume the whole group
SIGTSTP is sent to the entire foreground process group,
so do the some with our SIGCONT.
Debian's default sh (dash) doesn't replace itself with
the command, even if it's the last one in the -c option.
Of course, we do not need to use /bin/sh for the helpers
at all, though it doesn't cost us much. We could also
issue an explicit `exec`.
-rw-r--r-- | sdn.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -888,7 +888,7 @@ fun run_program (initializer_list<const char*> list, const string &filename) { // We don't provide job control--don't let us hang after ^Z while (waitpid (child, &status, WUNTRACED) > -1 && WIFSTOPPED (status)) if (WSTOPSIG (status) == SIGTSTP) - kill (child, SIGCONT); + kill (-child, SIGCONT); tcsetpgrp (STDOUT_FILENO, getpgid (0)); if (WIFEXITED (status) && WEXITSTATUS (status)) { |