|
|
1.1 root 1: static char *sccsid = "@(#)sh.time.c 4.1 10/9/80";
2:
3: #include "sh.h"
4:
5: /*
6: * C Shell - routines handling process timing and niceing
7: */
8: #ifdef VMUNIX
9: struct vtimes vm0;
10: #else
11: struct tms times0;
12: struct tms timesdol;
13: #endif
14:
15: settimes()
16: {
17:
18: time(&time0);
19: #ifdef VMUNIX
20: vtimes(&vm0, 0);
21: #else
22: times(×0);
23: #endif
24: }
25:
26: /*
27: * dotime is only called if it is truly a builtin function and not a
28: * prefix to another command
29: */
30: dotime()
31: {
32: time_t timedol;
33: #ifdef VMUNIX
34: struct vtimes vm1, vmch;
35:
36: vtimes(&vm1, &vmch);
37: vmsadd(&vm1, &vmch);
38: #endif
39:
40: time(&timedol);
41: #ifdef VMUNIX
42: pvtimes(&vm0, &vm1, timedol - time0);
43: #else
44: times(×dol);
45: ptimes(timedol - time0, ×0, ×dol);
46: #endif
47: }
48:
49: /*
50: * donice is only called when it on the line by itself or with a +- value
51: */
52: donice(v)
53: register char **v;
54: {
55: register char *cp;
56:
57: v++, cp = *v++;
58: if (cp == 0) {
59: #ifndef V6
60: nice(20);
61: nice(-10);
62: #endif
63: nice(4);
64: } else if (*v == 0 && any(cp[0], "+-")) {
65: #ifndef V6
66: nice(20);
67: nice(-10);
68: #endif
69: nice(getn(cp));
70: }
71: }
72:
73: #ifndef VMUNIX
74: ptimes(utime, stime, etime)
75: register time_t utime, stime, etime;
76: {
77:
78: p60ths(utime);
79: printf("u ");
80: p60ths(stime);
81: printf("s ");
82: psecs(etime);
83: printf(" %d%%\n", (int) (100 * (utime+stime) /
84: (60 * (etime ? etime : 1))));
85: }
86:
87: #else
88: vmsadd(vp, wp)
89: register struct vtimes *vp, *wp;
90: {
91:
92: vp->vm_utime += wp->vm_utime;
93: vp->vm_stime += wp->vm_stime;
94: vp->vm_nswap += wp->vm_nswap;
95: vp->vm_idsrss += wp->vm_idsrss;
96: vp->vm_ixrss += wp->vm_ixrss;
97: if (vp->vm_maxrss < wp->vm_maxrss)
98: vp->vm_maxrss = wp->vm_maxrss;
99: vp->vm_majflt += wp->vm_majflt;
100: vp->vm_minflt += wp->vm_minflt;
101: vp->vm_inblk += wp->vm_inblk;
102: vp->vm_oublk += wp->vm_oublk;
103: }
104:
105: pvtimes(v0, v1, sec)
106: register struct vtimes *v0, *v1;
107: time_t sec;
108: {
109: register time_t t =
110: (v1->vm_utime-v0->vm_utime)+(v1->vm_stime-v0->vm_stime);
111: register char *cp;
112: register int i;
113: register struct varent *vp = adrof("time");
114:
115: cp = "%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww";
116: if (vp && vp->vec[0] && vp->vec[1])
117: cp = vp->vec[1];
118: for (; *cp; cp++)
119: if (*cp != '%')
120: putchar(*cp);
121: else if (cp[1]) switch(*++cp) {
122:
123: case 'U':
124: p60ths(v1->vm_utime - v0->vm_utime);
125: break;
126:
127: case 'S':
128: p60ths(v1->vm_stime - v0->vm_stime);
129: break;
130:
131: case 'E':
132: psecs(sec);
133: break;
134:
135: case 'P':
136: printf("%d%%", (int) ((100 * t) / (60 * (sec ? sec : 1))));
137: break;
138:
139: case 'W':
140: i = v1->vm_nswap - v0->vm_nswap;
141: printf("%d", i);
142: break;
143:
144: case 'X':
145: printf("%d", t == 0 ? 0 : (v1->vm_ixrss-v0->vm_ixrss)/(2*t));
146: break;
147:
148: case 'D':
149: printf("%d", t == 0 ? 0 : (v1->vm_idsrss-v0->vm_idsrss)/(2*t));
150: break;
151:
152: case 'K':
153: printf("%d", t == 0 ? 0 : ((v1->vm_ixrss+v1->vm_idsrss) -
154: (v0->vm_ixrss+v0->vm_idsrss))/(2*t));
155: break;
156:
157: case 'M':
158: printf("%d", v1->vm_maxrss/2);
159: break;
160:
161: case 'F':
162: printf("%d", v1->vm_majflt-v0->vm_majflt);
163: break;
164:
165: case 'R':
166: printf("%d", v1->vm_minflt-v0->vm_minflt);
167: break;
168:
169: case 'I':
170: printf("%d", v1->vm_inblk-v0->vm_inblk);
171: break;
172:
173: case 'O':
174: printf("%d", v1->vm_oublk-v0->vm_oublk);
175: break;
176:
177: }
178: putchar('\n');
179: }
180: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.