1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #if defined(LIBC_SCCS) && !defined(lint) 8 static char sccsid[] = "@(#)vtimes.c 5.3 (Berkeley) 02/24/91"; 9 #endif LIBC_SCCS and not lint 10 11 #include <sys/time.h> 12 #include <sys/resource.h> 13 14 /* 15 * Backwards compatible vtimes. 16 */ 17 struct vtimes { 18 int vm_utime; /* user time (60'ths) */ 19 int vm_stime; /* system time (60'ths) */ 20 /* divide next two by utime+stime to get averages */ 21 unsigned vm_idsrss; /* integral of d+s rss */ 22 unsigned vm_ixrss; /* integral of text rss */ 23 int vm_maxrss; /* maximum rss */ 24 int vm_majflt; /* major page faults */ 25 int vm_minflt; /* minor page faults */ 26 int vm_nswap; /* number of swaps */ 27 int vm_inblk; /* block reads */ 28 int vm_oublk; /* block writes */ 29 }; 30 31 vtimes(par, chi) 32 register struct vtimes *par, *chi; 33 { 34 struct rusage ru; 35 static int getvtimes(); 36 37 if (par) { 38 if (getrusage(RUSAGE_SELF, &ru) < 0) 39 return (-1); 40 getvtimes(&ru, par); 41 } 42 if (chi) { 43 if (getrusage(RUSAGE_CHILDREN, &ru) < 0) 44 return (-1); 45 getvtimes(&ru, chi); 46 } 47 return (0); 48 } 49 50 static 51 getvtimes(aru, avt) 52 register struct rusage *aru; 53 register struct vtimes *avt; 54 { 55 static int scale60(); 56 57 avt->vm_utime = scale60(&aru->ru_utime); 58 avt->vm_stime = scale60(&aru->ru_stime); 59 avt->vm_idsrss = ((aru->ru_idrss+aru->ru_isrss) / 100) * 60; 60 avt->vm_ixrss = aru->ru_ixrss / 100 * 60; 61 avt->vm_maxrss = aru->ru_maxrss; 62 avt->vm_majflt = aru->ru_majflt; 63 avt->vm_minflt = aru->ru_minflt; 64 avt->vm_nswap = aru->ru_nswap; 65 avt->vm_inblk = aru->ru_inblock; 66 avt->vm_oublk = aru->ru_oublock; 67 } 68 69 static 70 scale60(tvp) 71 register struct timeval *tvp; 72 { 73 return (tvp->tv_sec * 60 + tvp->tv_usec / 16667); 74 } 75