diff --git a/bin/ps/extern.h b/bin/ps/extern.h index beb5d62869c..927343c9cfe 100644 --- a/bin/ps/extern.h +++ b/bin/ps/extern.h @@ -49,6 +49,7 @@ void arguments(KINFO *, VARENT *); void command(KINFO *, VARENT *); void cputime(KINFO *, VARENT *); int donlist(void); +void elapsed(KINFO *, VARENT *); const char *fmt_argv(char **, char *, size_t); double getpcpu(const KINFO *); void kvar(KINFO *, VARENT *); diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c index 79ed4dc669a..17cdc780d04 100644 --- a/bin/ps/keyword.c +++ b/bin/ps/keyword.c @@ -96,6 +96,7 @@ static VAR var[] = { {"cpu", "CPU", NULL, 0, kvar, NULL, 3, KOFF(ki_estcpu), UINT, "d", 0}, {"cputime", "", "time", 0, NULL, NULL, 0, 0, CHAR, NULL, 0}, + {"etime", "ELAPSED", NULL, USER, elapsed, NULL, 9, 0, CHAR, NULL, 0}, {"f", "F", NULL, 0, kvar, NULL, 7, KOFF(ki_flag), INT, "x", 0}, {"flags", "", "f", 0, NULL, NULL, 0, 0, CHAR, NULL, 0}, {"ignored", "", "sigignore", 0, NULL, NULL, 0, 0, CHAR, NULL, 0}, diff --git a/bin/ps/print.c b/bin/ps/print.c index e94920658c5..4f43aa4da5e 100644 --- a/bin/ps/print.c +++ b/bin/ps/print.c @@ -535,6 +535,23 @@ cputime(KINFO *k, VARENT *ve) (void)printf("%*s", v->width, obuff); } +void +elapsed(KINFO *k, VARENT *ve) +{ + VAR *v; + time_t secs; + char obuff[128]; + static time_t now; + + v = ve->var; + + if (!now) + time(&now); + secs = now - k->ki_p->ki_start.tv_sec; + (void)snprintf(obuff, sizeof(obuff), "%3ld:%02ld", secs/60, secs%60); + (void)printf("%*s", v->width, obuff); +} + double getpcpu(const KINFO *k) { diff --git a/bin/ps/ps.1 b/bin/ps/ps.1 index ba767f75406..438f574f56a 100644 --- a/bin/ps/ps.1 +++ b/bin/ps/ps.1 @@ -378,6 +378,8 @@ command command and arguments .It cpu short-term cpu usage factor (for scheduling) +.It etime +elapsed running time .It flags the process flags, in hexadecimal (alias f) .It inblk