Deleted Added
sdiff udiff text old ( 100616 ) new ( 145479 )
full compact
1/* $Header: /src/pub/tcsh/sh.time.c,v 3.25 2002/06/25 19:02:11 christos Exp $ */
2/*
3 * sh.time.c: Shell time keeping and printing.
4 */
5/*-
6 * Copyright (c) 1980, 1991 The Regents of the University of California.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without

--- 17 unchanged lines hidden (view full) ---

27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33#include "sh.h"
34
35RCSID("$Id: sh.time.c,v 3.25 2002/06/25 19:02:11 christos Exp $")
36
37#ifdef SUNOS4
38# include <machine/param.h>
39#endif /* SUNOS4 */
40
41/*
42 * C Shell - routines handling process timing and niceing
43 */

--- 111 unchanged lines hidden (view full) ---

155}
156
157/*
158 * donice is only called when it on the line by itself or with a +- value
159 */
160/*ARGSUSED*/
161void
162donice(v, c)
163 register Char **v;
164 struct command *c;
165{
166 register Char *cp;
167 int nval = 0;
168
169 USE(c);
170 v++, cp = *v++;
171 if (cp == 0)
172 nval = 4;
173 else if (*v == 0 && any("+-", cp[0]))
174 nval = getn(cp);
175#ifdef BSDNICE
176 if (setpriority(PRIO_PROCESS, 0, nval) == -1 && errno)
177 stderror(ERR_SYSTEM, "setpriority", strerror(errno));
178#else /* BSDNICE */
179 (void) nice(nval);
180#endif /* BSDNICE */
181}
182
183#ifdef BSDTIMES
184void
185ruadd(ru, ru2)
186 register struct sysrusage *ru, *ru2;
187{
188 tvadd(&ru->ru_utime, &ru2->ru_utime);
189 tvadd(&ru->ru_stime, &ru2->ru_stime);
190 if (ru2->ru_maxrss > ru->ru_maxrss)
191 ru->ru_maxrss = ru2->ru_maxrss;
192
193 ru->ru_ixrss += ru2->ru_ixrss;
194 ru->ru_idrss += ru2->ru_idrss;
195 ru->ru_isrss += ru2->ru_isrss;
196 ru->ru_minflt += ru2->ru_minflt;
197 ru->ru_majflt += ru2->ru_majflt;
198 ru->ru_nswap += ru2->ru_nswap;
199 ru->ru_inblock += ru2->ru_inblock;
200 ru->ru_oublock += ru2->ru_oublock;
201 ru->ru_msgsnd += ru2->ru_msgsnd;
202 ru->ru_msgrcv += ru2->ru_msgrcv;
203 ru->ru_nsignals += ru2->ru_nsignals;
204 ru->ru_nvcsw += ru2->ru_nvcsw;
205 ru->ru_nivcsw += ru2->ru_nivcsw;
206
207# ifdef convex
208 tvadd(&ru->ru_exutime, &ru2->ru_exutime);
209 ru->ru_utotal += ru2->ru_utotal;
210 ru->ru_usamples += ru2->ru_usamples;
211 ru->ru_stotal += ru2->ru_stotal;
212 ru->ru_ssamples += ru2->ru_ssamples;
213# endif /* convex */
214}
215
216#else /* BSDTIMES */
217# ifdef _SEQUENT_
218void
219ruadd(ru, ru2)
220 register struct process_stats *ru, *ru2;
221{
222 tvadd(&ru->ps_utime, &ru2->ps_utime);
223 tvadd(&ru->ps_stime, &ru2->ps_stime);
224 if (ru2->ps_maxrss > ru->ps_maxrss)
225 ru->ps_maxrss = ru2->ps_maxrss;
226
227 ru->ps_pagein += ru2->ps_pagein;
228 ru->ps_reclaim += ru2->ps_reclaim;

--- 55 unchanged lines hidden (view full) ---

284# define IADJUST(i) (((i) << 10) / CLK_TCK * 100)
285# else /* convex */
286# define IADJUST(i) (i)
287# endif /* convex */
288#endif /* SUNOS4 */
289
290void
291prusage(r0, r1, e, b)
292 register struct sysrusage *r0, *r1;
293 timeval_t *e, *b;
294
295#else /* BSDTIMES */
296# ifdef _SEQUENT_
297void
298prusage(r0, r1, e, b)
299 register struct process_stats *r0, *r1;
300 timeval_t *e, *b;
301
302# else /* _SEQUENT_ */
303void
304prusage(bs, es, e, b)
305 struct tms *bs, *es;
306
307# ifndef POSIX
308 time_t e, b;
309
310# else /* POSIX */
311 clock_t e, b;
312
313# endif /* POSIX */
314# endif /* _SEQUENT_ */
315#endif /* BSDTIMES */
316{
317#ifdef BSDTIMES
318 register time_t t =
319 (r1->ru_utime.tv_sec - r0->ru_utime.tv_sec) * 100 +
320 (r1->ru_utime.tv_usec - r0->ru_utime.tv_usec) / 10000 +
321 (r1->ru_stime.tv_sec - r0->ru_stime.tv_sec) * 100 +
322 (r1->ru_stime.tv_usec - r0->ru_stime.tv_usec) / 10000;
323
324#else
325# ifdef _SEQUENT_
326 register time_t t =
327 (r1->ps_utime.tv_sec - r0->ps_utime.tv_sec) * 100 +
328 (r1->ps_utime.tv_usec - r0->ps_utime.tv_usec) / 10000 +
329 (r1->ps_stime.tv_sec - r0->ps_stime.tv_sec) * 100 +
330 (r1->ps_stime.tv_usec - r0->ps_stime.tv_usec) / 10000;
331
332# else /* _SEQUENT_ */
333# ifndef POSIX
334 register time_t t = (es->tms_utime - bs->tms_utime +
335 es->tms_stime - bs->tms_stime) * 100 / HZ;
336
337# else /* POSIX */
338 register clock_t t = (es->tms_utime - bs->tms_utime +
339 es->tms_stime - bs->tms_stime) * 100 / clk_tck;
340
341# endif /* POSIX */
342# endif /* _SEQUENT_ */
343#endif /* BSDTIMES */
344
345 register char *cp;
346 register long i;
347 register struct varent *vp = adrof(STRtime);
348
349#ifdef BSDTIMES
350# ifdef convex
351 static struct system_information sysinfo;
352 long long memtmp; /* let memory calculations exceede 2Gb */
353# endif /* convex */
354 int ms = (int)
355 ((e->tv_sec - b->tv_sec) * 100 + (e->tv_usec - b->tv_usec) / 10000);

--- 100 unchanged lines hidden (view full) ---

456#else /* convex */
457 i = (ms == 0) ? 0 : (long)(t * 1000.0 / ms);
458#endif /* convex */
459 xprintf("%ld.%01ld%%", i / 10, i % 10); /* nn.n% */
460 break;
461
462#ifdef BSDTIMES
463 case 'W': /* number of swaps */
464 i = r1->ru_nswap - r0->ru_nswap;
465 xprintf("%ld", i);
466 break;
467
468#ifdef convex
469 case 'X': /* (average) shared text size */
470 memtmp = (t == 0 ? 0LL : IADJUST((long long)r1->ru_ixrss -
471 (long long)r0->ru_ixrss) /
472 (long long)t);

--- 17 unchanged lines hidden (view full) ---

490 ((long long)r0->ru_ixrss +
491 (long long)r0->ru_idrss +
492 (long long)r0->ru_isrss)) /
493 (long long)t);
494 xprintf("%lu", (unsigned long)memtmp);
495 break;
496#else /* !convex */
497 case 'X': /* (average) shared text size */
498 xprintf("%ld", t == 0 ? 0L :
499 IADJUST(r1->ru_ixrss - r0->ru_ixrss) / t);
500 break;
501
502 case 'D': /* (average) unshared data size */
503 xprintf("%ld", t == 0 ? 0L :
504 IADJUST(r1->ru_idrss + r1->ru_isrss -
505 (r0->ru_idrss + r0->ru_isrss)) / t);
506 break;
507
508 case 'K': /* (average) total data memory used */
509 xprintf("%ld", t == 0 ? 0L :
510 IADJUST((r1->ru_ixrss + r1->ru_isrss + r1->ru_idrss) -
511 (r0->ru_ixrss + r0->ru_idrss + r0->ru_isrss)) / t);
512 break;
513#endif /* convex */
514 case 'M': /* max. Resident Set Size */
515#ifdef SUNOS4
516 xprintf("%ld", pagetok(r1->ru_maxrss));
517#else
518# ifdef convex
519 xprintf("%ld", r1->ru_maxrss * 4L);
520# else /* !convex */
521 xprintf("%ld", r1->ru_maxrss / 2L);
522# endif /* convex */
523#endif /* SUNOS4 */
524 break;
525
526 case 'F': /* page faults */
527 xprintf("%ld", r1->ru_majflt - r0->ru_majflt);
528 break;
529
530 case 'R': /* page reclaims */
531 xprintf("%ld", r1->ru_minflt - r0->ru_minflt);
532 break;
533
534 case 'I': /* FS blocks in */
535 xprintf("%ld", r1->ru_inblock - r0->ru_inblock);
536 break;
537
538 case 'O': /* FS blocks out */
539 xprintf("%ld", r1->ru_oublock - r0->ru_oublock);
540 break;
541
542# ifdef convex
543 case 'C': /* CPU parallelization factor */
544 if (r1->ru_usamples != 0LL) {
545 long long parr = ((r1->ru_utotal * 100LL) /
546 r1->ru_usamples);
547 xprintf("%d.%02d", (int)(parr/100), (int)(parr%100));
548 } else
549 xprintf("?");
550 break;
551# endif /* convex */
552 case 'r': /* PWP: socket messages recieved */
553 xprintf("%ld", r1->ru_msgrcv - r0->ru_msgrcv);
554 break;
555
556 case 's': /* PWP: socket messages sent */
557 xprintf("%ld", r1->ru_msgsnd - r0->ru_msgsnd);
558 break;
559
560 case 'k': /* PWP: signals received */
561 xprintf("%ld", r1->ru_nsignals - r0->ru_nsignals);
562 break;
563
564 case 'w': /* PWP: voluntary context switches (waits) */
565 xprintf("%ld", r1->ru_nvcsw - r0->ru_nvcsw);
566 break;
567
568 case 'c': /* PWP: involuntary context switches */
569 xprintf("%ld", r1->ru_nivcsw - r0->ru_nivcsw);
570 break;
571#else /* BSDTIMES */
572# ifdef _SEQUENT_
573 case 'W': /* number of swaps */
574 i = r1->ps_swap - r0->ps_swap;
575 xprintf("%ld", i);
576 break;
577

--- 132 unchanged lines hidden ---