diff options
Diffstat (limited to 'Src/jobs.c')
-rw-r--r-- | Src/jobs.c | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/Src/jobs.c b/Src/jobs.c index 66dfb5a7e..330ee6b37 100644 --- a/Src/jobs.c +++ b/Src/jobs.c @@ -728,6 +728,40 @@ printtime(struct timeval *real, child_times_t *ti, char *desc) case 'S': fprintf(stderr, "%4.2fs", system_time); break; + case 'm': + switch (*++s) { + case 'E': + fprintf(stderr, "%0.fms", elapsed_time * 1000.0); + break; + case 'U': + fprintf(stderr, "%0.fms", user_time * 1000.0); + break; + case 'S': + fprintf(stderr, "%0.fms", system_time * 1000.0); + break; + default: + fprintf(stderr, "%%m"); + s--; + break; + } + break; + case 'u': + switch (*++s) { + case 'E': + fprintf(stderr, "%0.fus", elapsed_time * 1000000.0); + break; + case 'U': + fprintf(stderr, "%0.fus", user_time * 1000000.0); + break; + case 'S': + fprintf(stderr, "%0.fus", system_time * 1000000.0); + break; + default: + fprintf(stderr, "%%u"); + s--; + break; + } + break; case '*': switch (*++s) { case 'E': @@ -891,6 +925,7 @@ should_report_time(Job j) struct value vbuf; Value v; char *s = "REPORTTIME"; + int save_errflag = errflag; zlong reporttime = -1; #ifdef HAVE_GETRUSAGE char *sm = "REPORTMEMORY"; @@ -902,12 +937,14 @@ should_report_time(Job j) return 1; queue_signals(); + errflag = 0; if ((v = getvalue(&vbuf, &s, 0))) reporttime = getintvalue(v); #ifdef HAVE_GETRUSAGE if ((v = getvalue(&vbuf, &sm, 0))) reportmemory = getintvalue(v); #endif + errflag = save_errflag; unqueue_signals(); if (reporttime < 0 #ifdef HAVE_GETRUSAGE @@ -2217,7 +2254,8 @@ bin_fg(char *name, char **argv, Options ops, int func) return 0; } else { /* Must be BIN_WAIT, so wait for all jobs */ for (job = 0; job <= maxjob; job++) - if (job != thisjob && jobtab[job].stat) + if (job != thisjob && jobtab[job].stat && + !(jobtab[job].stat & STAT_NOPRINT)) retval = zwaitjob(job, 1); unqueue_signals(); return retval; @@ -2251,8 +2289,11 @@ bin_fg(char *name, char **argv, Options ops, int func) */ retval = waitforpid(pid, 1); } - if (retval == 0) - retval = lastval2; + if (retval == 0) { + if ((retval = getbgstatus(pid)) < 0) { + retval = lastval2; + } + } } else if ((retval = getbgstatus(pid)) < 0) { zwarnnam(name, "pid %d is not a child of this shell", pid); /* presumably lastval2 doesn't tell us a heck of a lot? */ |