From ef9b4ad79e745fc3add4f4a3f4d45cc841214805 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 18 Aug 2010 21:21:17 +0000 Subject: 28172: mark processes as not stopped if sent SIGCONT --- Src/jobs.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'Src') 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(); -- cgit 1.4.1