diff options
Diffstat (limited to 'Src/jobs.c')
-rw-r--r-- | Src/jobs.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Src/jobs.c b/Src/jobs.c index 6c080de0c..a40291a88 100644 --- a/Src/jobs.c +++ b/Src/jobs.c @@ -2217,7 +2217,7 @@ bin_kill(char *nam, char **argv, UNUSED(Options ops), UNUSED(int func)) signal. */ if (jobtab[p].stat & STAT_STOPPED) { if (sig == SIGCONT) - jobtab[p].stat &= ~STAT_STOPPED; + makerunning(jobtab + p); if (sig != SIGKILL && sig != SIGCONT && sig != SIGTSTP && sig != SIGTTOU && sig != SIGTTIN && sig != SIGSTOP) killjb(jobtab + p, SIGCONT); @@ -2225,9 +2225,19 @@ bin_kill(char *nam, char **argv, UNUSED(Options ops), UNUSED(int func)) } else if (!isanum(*argv)) { zwarnnam("kill", "illegal pid: %s", *argv); returnval++; - } else if (kill(atoi(*argv), sig) == -1) { - zwarnnam("kill", "kill %s failed: %e", *argv, errno); - returnval++; + } else { + int pid = atoi(*argv); + if (kill(pid, sig) == -1) { + zwarnnam("kill", "kill %s failed: %e", *argv, errno); + returnval++; + } else if (sig == SIGCONT) { + Job jn; + Process pn; + if (findproc(pid, &jn, &pn, 0)) { + if (WIFSTOPPED(pn->status)) + pn->status = SP_RUNNING; + } + } } } unqueue_signals(); |