* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley Software License Agreement
* specifies the terms and conditions for redistribution.
static char *sccsid
= "@(#)time.c 5.4 (Berkeley) %G%";
* C Shell - routines handling process timing and niceing
(void) gettimeofday(&time0
, (struct timezone
*)0);
(void) getrusage(RUSAGE_SELF
, &ru0
);
(void) getrusage(RUSAGE_CHILDREN
, &ruch
);
* dotime is only called if it is truly a builtin function and not a
* prefix to another command
(void) getrusage(RUSAGE_SELF
, &ru1
);
(void) getrusage(RUSAGE_CHILDREN
, &ruch
);
(void) gettimeofday(&timedol
, (struct timezone
*)0);
prusage(&ru0
, &ru1
, &timedol
, &time0
);
* donice is only called when it on the line by itself or with a +- value
else if (*v
== 0 && any(cp
[0], "+-"))
(void) setpriority(PRIO_PROCESS
, 0, nval
);
register struct rusage
*ru
, *ru2
;
tvadd(&ru
->ru_utime
, &ru2
->ru_utime
);
tvadd(&ru
->ru_stime
, &ru2
->ru_stime
);
if (ru2
->ru_maxrss
> ru
->ru_maxrss
)
ru
->ru_maxrss
= ru2
->ru_maxrss
;
cnt
= &ru
->ru_last
- &ru
->ru_first
+ 1;
lp
= &ru
->ru_first
; lp2
= &ru2
->ru_first
;
register struct rusage
*r0
, *r1
;
(r1
->ru_utime
.tv_sec
-r0
->ru_utime
.tv_sec
)*100+
(r1
->ru_utime
.tv_usec
-r0
->ru_utime
.tv_usec
)/10000+
(r1
->ru_stime
.tv_sec
-r0
->ru_stime
.tv_sec
)*100+
(r1
->ru_stime
.tv_usec
-r0
->ru_stime
.tv_usec
)/10000;
register struct varent
*vp
= adrof("time");
(e
->tv_sec
-b
->tv_sec
)*100 + (e
->tv_usec
-b
->tv_usec
)/10000;
cp
= "%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww";
if (vp
&& vp
->vec
[0] && vp
->vec
[1])
else if (cp
[1]) switch(*++cp
) {
pdeltat(&r1
->ru_utime
, &r0
->ru_utime
);
pdeltat(&r1
->ru_stime
, &r0
->ru_stime
);
printf("%d%%", (int) (t
*100 / ((ms
? ms
: 1))));
i
= r1
->ru_nswap
- r0
->ru_nswap
;
printf("%d", t
== 0 ? 0 : (r1
->ru_ixrss
-r0
->ru_ixrss
)/t
);
printf("%d", t
== 0 ? 0 :
(r1
->ru_idrss
+r1
->ru_isrss
-(r0
->ru_idrss
+r0
->ru_isrss
))/t
);
printf("%d", t
== 0 ? 0 :
((r1
->ru_ixrss
+r1
->ru_isrss
+r1
->ru_idrss
) -
(r0
->ru_ixrss
+r0
->ru_idrss
+r0
->ru_isrss
))/t
);
printf("%d", r1
->ru_maxrss
/2);
printf("%d", r1
->ru_majflt
-r0
->ru_majflt
);
printf("%d", r1
->ru_minflt
-r0
->ru_minflt
);
printf("%d", r1
->ru_inblock
-r0
->ru_inblock
);
printf("%d", r1
->ru_oublock
-r0
->ru_oublock
);
printf("%d.%01d", td
.tv_sec
, td
.tv_usec
/100000);
struct timeval
*tsum
, *t0
;
tsum
->tv_sec
+= t0
->tv_sec
;
tsum
->tv_usec
+= t0
->tv_usec
;
if (tsum
->tv_usec
> 1000000)
tsum
->tv_sec
++, tsum
->tv_usec
-= 1000000;
struct timeval
*tdiff
, *t1
, *t0
;
tdiff
->tv_sec
= t1
->tv_sec
- t0
->tv_sec
;
tdiff
->tv_usec
= t1
->tv_usec
- t0
->tv_usec
;
tdiff
->tv_sec
--, tdiff
->tv_usec
+= 1000000;