about summary refs log tree commit diff
path: root/Src/jobs.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2006-10-30 10:37:17 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2006-10-30 10:37:17 +0000
commitff9f2bb88e60e77e8b6d7670ec90651ac4ae5cec (patch)
tree753e15d925aad1c50d58b7212602b7135c153357 /Src/jobs.c
parent3292f9ec1fbac66f644a54baafb775cdd477027a (diff)
downloadzsh-ff9f2bb88e60e77e8b6d7670ec90651ac4ae5cec.tar.gz
zsh-ff9f2bb88e60e77e8b6d7670ec90651ac4ae5cec.tar.xz
zsh-ff9f2bb88e60e77e8b6d7670ec90651ac4ae5cec.zip
22913: set $! on "bg"
Diffstat (limited to 'Src/jobs.c')
-rw-r--r--Src/jobs.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/Src/jobs.c b/Src/jobs.c
index 509b9e843..5b42a45b0 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -1789,9 +1789,21 @@ bin_fg(char *name, char **argv, Options ops, int func)
 	case BIN_WAIT:
 	    if (func == BIN_BG)
 		jobtab[job].stat |= STAT_NOSTTY;
-	    if ((stopped = (jobtab[job].stat & STAT_STOPPED)))
+	    if ((stopped = (jobtab[job].stat & STAT_STOPPED))) {
 		makerunning(jobtab + job);
-	    else if (func == BIN_BG) {
+		if (func == BIN_BG) {
+		    /* Set $! to indicate this was backgrounded */
+		    Process pn = jobtab[job].procs;
+		    for (;;) {
+			Process next = pn->next;
+			if (!next) {
+			    lastpid = (zlong) pn->pid;
+			    break;
+			}
+			pn = next;
+		    }
+		}
+	    } else if (func == BIN_BG) {
 		/* Silly to bg a job already running. */
 		zwarnnam(name, "job already in background");
 		thisjob = ocj;