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