sh.time.c (100616) | sh.time.c (145479) |
---|---|
1/* $Header: /src/pub/tcsh/sh.time.c,v 3.25 2002/06/25 19:02:11 christos Exp $ */ | 1/* $Header: /src/pub/tcsh/sh.time.c,v 3.28 2005/03/03 16:49:16 kim 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 | 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 $") | 35RCSID("$Id: sh.time.c,v 3.28 2005/03/03 16:49:16 kim 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) | 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; | 163 Char **v; |
164 struct command *c; 165{ | 164 struct command *c; 165{ |
166 register Char *cp; | 166 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); | 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 | 175#ifdef HAVE_SETPRIORITY |
176 if (setpriority(PRIO_PROCESS, 0, nval) == -1 && errno) 177 stderror(ERR_SYSTEM, "setpriority", strerror(errno)); | 176 if (setpriority(PRIO_PROCESS, 0, nval) == -1 && errno) 177 stderror(ERR_SYSTEM, "setpriority", strerror(errno)); |
178#else /* BSDNICE */ | 178#else /* !HAVE_SETPRIORITY */ |
179 (void) nice(nval); | 179 (void) nice(nval); |
180#endif /* BSDNICE */ | 180#endif /* HAVE_SETPRIORITY */ |
181} 182 183#ifdef BSDTIMES 184void 185ruadd(ru, ru2) | 181} 182 183#ifdef BSDTIMES 184void 185ruadd(ru, ru2) |
186 register struct sysrusage *ru, *ru2; | 186 struct sysrusage *ru, *ru2; |
187{ 188 tvadd(&ru->ru_utime, &ru2->ru_utime); 189 tvadd(&ru->ru_stime, &ru2->ru_stime); | 187{ 188 tvadd(&ru->ru_utime, &ru2->ru_utime); 189 tvadd(&ru->ru_stime, &ru2->ru_stime); |
190#ifndef _OSD_POSIX |
|
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; | 191 if (ru2->ru_maxrss > ru->ru_maxrss) 192 ru->ru_maxrss = ru2->ru_maxrss; 193 194 ru->ru_ixrss += ru2->ru_ixrss; 195 ru->ru_idrss += ru2->ru_idrss; 196 ru->ru_isrss += ru2->ru_isrss; 197 ru->ru_minflt += ru2->ru_minflt; 198 ru->ru_majflt += ru2->ru_majflt; 199 ru->ru_nswap += ru2->ru_nswap; 200 ru->ru_inblock += ru2->ru_inblock; 201 ru->ru_oublock += ru2->ru_oublock; 202 ru->ru_msgsnd += ru2->ru_msgsnd; 203 ru->ru_msgrcv += ru2->ru_msgrcv; 204 ru->ru_nsignals += ru2->ru_nsignals; 205 ru->ru_nvcsw += ru2->ru_nvcsw; 206 ru->ru_nivcsw += ru2->ru_nivcsw; |
207#endif /*bs2000*/ |
|
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) | 208 209# ifdef convex 210 tvadd(&ru->ru_exutime, &ru2->ru_exutime); 211 ru->ru_utotal += ru2->ru_utotal; 212 ru->ru_usamples += ru2->ru_usamples; 213 ru->ru_stotal += ru2->ru_stotal; 214 ru->ru_ssamples += ru2->ru_ssamples; 215# endif /* convex */ 216} 217 218#else /* BSDTIMES */ 219# ifdef _SEQUENT_ 220void 221ruadd(ru, ru2) |
220 register struct process_stats *ru, *ru2; | 222 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) | 223{ 224 tvadd(&ru->ps_utime, &ru2->ps_utime); 225 tvadd(&ru->ps_stime, &ru2->ps_stime); 226 if (ru2->ps_maxrss > ru->ps_maxrss) 227 ru->ps_maxrss = ru2->ps_maxrss; 228 229 ru->ps_pagein += ru2->ps_pagein; 230 ru->ps_reclaim += ru2->ps_reclaim; --- 55 unchanged lines hidden (view full) --- 286# define IADJUST(i) (((i) << 10) / CLK_TCK * 100) 287# else /* convex */ 288# define IADJUST(i) (i) 289# endif /* convex */ 290#endif /* SUNOS4 */ 291 292void 293prusage(r0, r1, e, b) |
292 register struct sysrusage *r0, *r1; | 294 struct sysrusage *r0, *r1; |
293 timeval_t *e, *b; 294 295#else /* BSDTIMES */ 296# ifdef _SEQUENT_ 297void 298prusage(r0, r1, e, b) | 295 timeval_t *e, *b; 296 297#else /* BSDTIMES */ 298# ifdef _SEQUENT_ 299void 300prusage(r0, r1, e, b) |
299 register struct process_stats *r0, *r1; | 301 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 | 302 timeval_t *e, *b; 303 304# else /* _SEQUENT_ */ 305void 306prusage(bs, es, e, b) 307 struct tms *bs, *es; 308 309# ifndef POSIX 310 time_t e, b; 311 312# else /* POSIX */ 313 clock_t e, b; 314 315# endif /* POSIX */ 316# endif /* _SEQUENT_ */ 317#endif /* BSDTIMES */ 318{ 319#ifdef BSDTIMES |
318 register time_t t = | 320 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_ | 321 (r1->ru_utime.tv_sec - r0->ru_utime.tv_sec) * 100 + 322 (r1->ru_utime.tv_usec - r0->ru_utime.tv_usec) / 10000 + 323 (r1->ru_stime.tv_sec - r0->ru_stime.tv_sec) * 100 + 324 (r1->ru_stime.tv_usec - r0->ru_stime.tv_usec) / 10000; 325 326#else 327# ifdef _SEQUENT_ |
326 register time_t t = | 328 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 | 329 (r1->ps_utime.tv_sec - r0->ps_utime.tv_sec) * 100 + 330 (r1->ps_utime.tv_usec - r0->ps_utime.tv_usec) / 10000 + 331 (r1->ps_stime.tv_sec - r0->ps_stime.tv_sec) * 100 + 332 (r1->ps_stime.tv_usec - r0->ps_stime.tv_usec) / 10000; 333 334# else /* _SEQUENT_ */ 335# ifndef POSIX |
334 register time_t t = (es->tms_utime - bs->tms_utime + | 336 time_t t = (es->tms_utime - bs->tms_utime + |
335 es->tms_stime - bs->tms_stime) * 100 / HZ; 336 337# else /* POSIX */ | 337 es->tms_stime - bs->tms_stime) * 100 / HZ; 338 339# else /* POSIX */ |
338 register clock_t t = (es->tms_utime - bs->tms_utime + | 340 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 | 341 es->tms_stime - bs->tms_stime) * 100 / clk_tck; 342 343# endif /* POSIX */ 344# endif /* _SEQUENT_ */ 345#endif /* BSDTIMES */ 346 |
345 register char *cp; 346 register long i; 347 register struct varent *vp = adrof(STRtime); | 347 const char *cp; 348 long i; 349 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 */ | 350 351#ifdef BSDTIMES 352# ifdef convex 353 static struct system_information sysinfo; 354 long long memtmp; /* let memory calculations exceede 2Gb */ 355# endif /* convex */ 356 int ms = (int) 357 ((e->tv_sec - b->tv_sec) * 100 + (e->tv_usec - b->tv_usec) / 10000); --- 100 unchanged lines hidden (view full) --- 458#else /* convex */ 459 i = (ms == 0) ? 0 : (long)(t * 1000.0 / ms); 460#endif /* convex */ 461 xprintf("%ld.%01ld%%", i / 10, i % 10); /* nn.n% */ 462 break; 463 464#ifdef BSDTIMES 465 case 'W': /* number of swaps */ |
466#ifdef _OSD_POSIX 467 i = 0; 468#else |
|
464 i = r1->ru_nswap - r0->ru_nswap; | 469 i = r1->ru_nswap - r0->ru_nswap; |
470#endif |
|
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 */ | 471 xprintf("%ld", i); 472 break; 473 474#ifdef convex 475 case 'X': /* (average) shared text size */ 476 memtmp = (t == 0 ? 0LL : IADJUST((long long)r1->ru_ixrss - 477 (long long)r0->ru_ixrss) / 478 (long long)t); --- 17 unchanged lines hidden (view full) --- 496 ((long long)r0->ru_ixrss + 497 (long long)r0->ru_idrss + 498 (long long)r0->ru_isrss)) / 499 (long long)t); 500 xprintf("%lu", (unsigned long)memtmp); 501 break; 502#else /* !convex */ 503 case 'X': /* (average) shared text size */ |
504#ifdef _OSD_POSIX 505 xprintf("0",0); 506#else |
|
498 xprintf("%ld", t == 0 ? 0L : 499 IADJUST(r1->ru_ixrss - r0->ru_ixrss) / t); | 507 xprintf("%ld", t == 0 ? 0L : 508 IADJUST(r1->ru_ixrss - r0->ru_ixrss) / t); |
509#endif |
|
500 break; 501 502 case 'D': /* (average) unshared data size */ | 510 break; 511 512 case 'D': /* (average) unshared data size */ |
513#ifdef _OSD_POSIX 514 xprintf("0",0); 515#else |
|
503 xprintf("%ld", t == 0 ? 0L : 504 IADJUST(r1->ru_idrss + r1->ru_isrss - 505 (r0->ru_idrss + r0->ru_isrss)) / t); | 516 xprintf("%ld", t == 0 ? 0L : 517 IADJUST(r1->ru_idrss + r1->ru_isrss - 518 (r0->ru_idrss + r0->ru_isrss)) / t); |
519#endif |
|
506 break; 507 508 case 'K': /* (average) total data memory used */ | 520 break; 521 522 case 'K': /* (average) total data memory used */ |
523#ifdef _OSD_POSIX 524 xprintf("0",0); 525#else |
|
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); | 526 xprintf("%ld", t == 0 ? 0L : 527 IADJUST((r1->ru_ixrss + r1->ru_isrss + r1->ru_idrss) - 528 (r0->ru_ixrss + r0->ru_idrss + r0->ru_isrss)) / t); |
529#endif |
|
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 */ | 530 break; 531#endif /* convex */ 532 case 'M': /* max. Resident Set Size */ 533#ifdef SUNOS4 534 xprintf("%ld", pagetok(r1->ru_maxrss)); 535#else 536# ifdef convex 537 xprintf("%ld", r1->ru_maxrss * 4L); 538# else /* !convex */ |
539# ifdef _OSD_POSIX 540 xprintf("0",0); 541# else |
|
521 xprintf("%ld", r1->ru_maxrss / 2L); | 542 xprintf("%ld", r1->ru_maxrss / 2L); |
543# endif |
|
522# endif /* convex */ 523#endif /* SUNOS4 */ 524 break; 525 526 case 'F': /* page faults */ | 544# endif /* convex */ 545#endif /* SUNOS4 */ 546 break; 547 548 case 'F': /* page faults */ |
549#ifdef _OSD_POSIX 550 xprintf("0",0); 551#else |
|
527 xprintf("%ld", r1->ru_majflt - r0->ru_majflt); | 552 xprintf("%ld", r1->ru_majflt - r0->ru_majflt); |
553#endif |
|
528 break; 529 530 case 'R': /* page reclaims */ | 554 break; 555 556 case 'R': /* page reclaims */ |
557#ifdef _OSD_POSIX 558 xprintf("0",0); 559#else |
|
531 xprintf("%ld", r1->ru_minflt - r0->ru_minflt); | 560 xprintf("%ld", r1->ru_minflt - r0->ru_minflt); |
561#endif |
|
532 break; 533 534 case 'I': /* FS blocks in */ | 562 break; 563 564 case 'I': /* FS blocks in */ |
565#ifdef _OSD_POSIX 566 xprintf("0",0); 567#else |
|
535 xprintf("%ld", r1->ru_inblock - r0->ru_inblock); | 568 xprintf("%ld", r1->ru_inblock - r0->ru_inblock); |
569#endif |
|
536 break; 537 538 case 'O': /* FS blocks out */ | 570 break; 571 572 case 'O': /* FS blocks out */ |
573#ifdef _OSD_POSIX 574 xprintf("0",0); 575#else |
|
539 xprintf("%ld", r1->ru_oublock - r0->ru_oublock); | 576 xprintf("%ld", r1->ru_oublock - r0->ru_oublock); |
577#endif |
|
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 */ | 578 break; 579 580# ifdef convex 581 case 'C': /* CPU parallelization factor */ 582 if (r1->ru_usamples != 0LL) { 583 long long parr = ((r1->ru_utotal * 100LL) / 584 r1->ru_usamples); 585 xprintf("%d.%02d", (int)(parr/100), (int)(parr%100)); 586 } else 587 xprintf("?"); 588 break; 589# endif /* convex */ 590 case 'r': /* PWP: socket messages recieved */ |
591#ifdef _OSD_POSIX 592 xprintf("0",0); 593#else |
|
553 xprintf("%ld", r1->ru_msgrcv - r0->ru_msgrcv); | 594 xprintf("%ld", r1->ru_msgrcv - r0->ru_msgrcv); |
595#endif |
|
554 break; 555 556 case 's': /* PWP: socket messages sent */ | 596 break; 597 598 case 's': /* PWP: socket messages sent */ |
599#ifdef _OSD_POSIX 600 xprintf("0",0); 601#else |
|
557 xprintf("%ld", r1->ru_msgsnd - r0->ru_msgsnd); | 602 xprintf("%ld", r1->ru_msgsnd - r0->ru_msgsnd); |
603#endif |
|
558 break; 559 560 case 'k': /* PWP: signals received */ | 604 break; 605 606 case 'k': /* PWP: signals received */ |
607#ifdef _OSD_POSIX 608 xprintf("0",0); 609#else |
|
561 xprintf("%ld", r1->ru_nsignals - r0->ru_nsignals); | 610 xprintf("%ld", r1->ru_nsignals - r0->ru_nsignals); |
611#endif |
|
562 break; 563 564 case 'w': /* PWP: voluntary context switches (waits) */ | 612 break; 613 614 case 'w': /* PWP: voluntary context switches (waits) */ |
615#ifdef _OSD_POSIX 616 xprintf("0",0); 617#else |
|
565 xprintf("%ld", r1->ru_nvcsw - r0->ru_nvcsw); | 618 xprintf("%ld", r1->ru_nvcsw - r0->ru_nvcsw); |
619#endif |
|
566 break; 567 568 case 'c': /* PWP: involuntary context switches */ | 620 break; 621 622 case 'c': /* PWP: involuntary context switches */ |
623#ifdef _OSD_POSIX 624 xprintf("0",0); 625#else |
|
569 xprintf("%ld", r1->ru_nivcsw - r0->ru_nivcsw); | 626 xprintf("%ld", r1->ru_nivcsw - r0->ru_nivcsw); |
627#endif |
|
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 --- | 628 break; 629#else /* BSDTIMES */ 630# ifdef _SEQUENT_ 631 case 'W': /* number of swaps */ 632 i = r1->ps_swap - r0->ps_swap; 633 xprintf("%ld", i); 634 break; 635 --- 132 unchanged lines hidden --- |