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