diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c index 94f19b121b5d..c0bddc27fb77 100644 --- a/usr.bin/top/machine.c +++ b/usr.bin/top/machine.c @@ -67,8 +67,8 @@ int compare_pid(const void *a, const void *b); struct handle { - struct kinfo_proc **next_proc; /* points to next valid proc pointer */ - int remaining; /* number of pointers remaining */ + struct kinfo_proc **next_proc; /* points to next valid proc pointer */ + int remaining; /* number of pointers remaining */ }; /* declarations for load_avg */ @@ -118,7 +118,7 @@ static char up_header[] = char *state_abbrev[] = { - "", "START", "RUN\0\0\0", "SLEEP", "STOP", "ZOMB", "WAIT", "LOCK" + "", "START", "RUN\0\0\0", "SLEEP", "STOP", "ZOMB", "WAIT", "LOCK" }; @@ -146,31 +146,32 @@ static long cp_diff[CPUSTATES]; int process_states[8]; char *procstatenames[] = { - "", " starting, ", " running, ", " sleeping, ", " stopped, ", - " zombie, ", " waiting, ", " lock, ", - NULL + "", " starting, ", " running, ", " sleeping, ", " stopped, ", + " zombie, ", " waiting, ", " lock, ", + NULL }; /* these are for detailing the cpu states */ int cpu_states[CPUSTATES]; char *cpustatenames[] = { - "user", "nice", "system", "interrupt", "idle", NULL + "user", "nice", "system", "interrupt", "idle", NULL }; /* these are for detailing the memory statistics */ int memory_stats[7]; char *memorynames[] = { - "K Active, ", "K Inact, ", "K Wired, ", "K Cache, ", "K Buf, ", "K Free", - NULL + /* 0 1 2 3 4 5 */ + "K Active, ", "K Inact, ", "K Wired, ", "K Cache, ", "K Buf, ", "K Free", + NULL }; int swap_stats[7]; char *swapnames[] = { -/* 0 1 2 3 4 5 */ - "K Total, ", "K Used, ", "K Free, ", "% Inuse, ", "K In, ", "K Out", - NULL + /* 0 1 2 3 4 5 */ + "K Total, ", "K Used, ", "K Free, ", "% Inuse, ", "K In, ", "K Out", + NULL }; @@ -205,92 +206,92 @@ long percentages(); #ifdef ORDER /* sorting orders. first is default */ char *ordernames[] = { - "cpu", "size", "res", "time", "pri", NULL + "cpu", "size", "res", "time", "pri", NULL }; #endif int machine_init(struct statics *statics) { - int pagesize; - size_t modelen; - struct passwd *pw; + int pagesize; + size_t modelen; + struct passwd *pw; - modelen = sizeof(smpmode); - if ((sysctlbyname("machdep.smp_active", &smpmode, &modelen, NULL, 0) < 0 && - sysctlbyname("kern.smp.active", &smpmode, &modelen, NULL, 0) < 0) || - modelen != sizeof(smpmode)) - smpmode = 0; + modelen = sizeof(smpmode); + if ((sysctlbyname("machdep.smp_active", &smpmode, &modelen, NULL, 0) < 0 && + sysctlbyname("kern.smp.active", &smpmode, &modelen, NULL, 0) < 0) || + modelen != sizeof(smpmode)) + smpmode = 0; - while ((pw = getpwent()) != NULL) { - if (strlen(pw->pw_name) > namelength) - namelength = strlen(pw->pw_name); - } - if (namelength < 8) - namelength = 8; - if (smpmode && namelength > 13) - namelength = 13; - else if (namelength > 15) - namelength = 15; + while ((pw = getpwent()) != NULL) { + if (strlen(pw->pw_name) > namelength) + namelength = strlen(pw->pw_name); + } + if (namelength < 8) + namelength = 8; + if (smpmode && namelength > 13) + namelength = 13; + else if (namelength > 15) + namelength = 15; - if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", O_RDONLY, "kvm_open")) == NULL) - return -1; + if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", O_RDONLY, "kvm_open")) == NULL) + return -1; - GETSYSCTL("kern.ccpu", ccpu); + GETSYSCTL("kern.ccpu", ccpu); - /* this is used in calculating WCPU -- calculate it ahead of time */ - logcpu = log(loaddouble(ccpu)); + /* this is used in calculating WCPU -- calculate it ahead of time */ + logcpu = log(loaddouble(ccpu)); - pbase = NULL; - pref = NULL; - nproc = 0; - onproc = -1; - /* get the page size with "getpagesize" and calculate pageshift from it */ - pagesize = getpagesize(); - pageshift = 0; - while (pagesize > 1) - { - pageshift++; - pagesize >>= 1; - } + pbase = NULL; + pref = NULL; + nproc = 0; + onproc = -1; + /* get the page size with "getpagesize" and calculate pageshift from it */ + pagesize = getpagesize(); + pageshift = 0; + while (pagesize > 1) + { + pageshift++; + pagesize >>= 1; + } - /* we only need the amount of log(2)1024 for our conversion */ - pageshift -= LOG1024; + /* we only need the amount of log(2)1024 for our conversion */ + pageshift -= LOG1024; - /* fill in the statics information */ - statics->procstate_names = procstatenames; - statics->cpustate_names = cpustatenames; - statics->memory_names = memorynames; - statics->swap_names = swapnames; + /* fill in the statics information */ + statics->procstate_names = procstatenames; + statics->cpustate_names = cpustatenames; + statics->memory_names = memorynames; + statics->swap_names = swapnames; #ifdef ORDER - statics->order_names = ordernames; + statics->order_names = ordernames; #endif - /* all done! */ - return(0); + /* all done! */ + return (0); } char * format_header(char *uname_field) { - static char Header[128]; - const char *prehead; + static char Header[128]; + const char *prehead; - switch (displaymode) { - case DISP_CPU: - prehead = smpmode ? smp_header : up_header; - break; - case DISP_IO: - prehead = io_header; - break; - } + switch (displaymode) { + case DISP_CPU: + prehead = smpmode ? smp_header : up_header; + break; + case DISP_IO: + prehead = io_header; + break; + } - snprintf(Header, sizeof(Header), prehead, - namelength, namelength, uname_field); + snprintf(Header, sizeof(Header), prehead, + namelength, namelength, uname_field); - cmdlengthdelta = strlen(Header) - 7; + cmdlengthdelta = strlen(Header) - 7; - return Header; + return (Header); } static int swappgsin = -1; @@ -300,111 +301,111 @@ extern struct timeval timeout; void get_system_info(struct system_info *si) { - long total; - struct loadavg sysload; - int mib[2]; - struct timeval boottime; - size_t bt_size; + long total; + struct loadavg sysload; + int mib[2]; + struct timeval boottime; + size_t bt_size; - /* get the cp_time array */ - GETSYSCTL("kern.cp_time", cp_time); - GETSYSCTL("vm.loadavg", sysload); - GETSYSCTL("kern.lastpid", lastpid); + /* get the cp_time array */ + GETSYSCTL("kern.cp_time", cp_time); + GETSYSCTL("vm.loadavg", sysload); + GETSYSCTL("kern.lastpid", lastpid); - /* convert load averages to doubles */ - { - int i; - double *infoloadp; - - infoloadp = si->load_avg; - for (i = 0; i < 3; i++) + /* convert load averages to doubles */ { + int i; + double *infoloadp; + + infoloadp = si->load_avg; + for (i = 0; i < 3; i++) + { #ifdef notyet - *infoloadp++ = ((double) sysload.ldavg[i]) / sysload.fscale; + *infoloadp++ = ((double) sysload.ldavg[i]) / sysload.fscale; #endif - *infoloadp++ = loaddouble(sysload.ldavg[i]); - } - } - - /* convert cp_time counts to percentages */ - total = percentages(CPUSTATES, cpu_states, cp_time, cp_old, cp_diff); - - /* sum memory & swap statistics */ - { - static unsigned int swap_delay = 0; - static int swapavail = 0; - static int swapfree = 0; - static int bufspace = 0; - static int nspgsin, nspgsout; - - GETSYSCTL("vfs.bufspace", bufspace); - GETSYSCTL("vm.stats.vm.v_active_count", memory_stats[0]); - GETSYSCTL("vm.stats.vm.v_inactive_count", memory_stats[1]); - GETSYSCTL("vm.stats.vm.v_wire_count", memory_stats[2]); - GETSYSCTL("vm.stats.vm.v_cache_count", memory_stats[3]); - GETSYSCTL("vm.stats.vm.v_free_count", memory_stats[5]); - GETSYSCTL("vm.stats.vm.v_swappgsin", nspgsin); - GETSYSCTL("vm.stats.vm.v_swappgsout", nspgsout); - /* convert memory stats to Kbytes */ - memory_stats[0] = pagetok(memory_stats[0]); - memory_stats[1] = pagetok(memory_stats[1]); - memory_stats[2] = pagetok(memory_stats[2]); - memory_stats[3] = pagetok(memory_stats[3]); - memory_stats[4] = bufspace / 1024; - memory_stats[5] = pagetok(memory_stats[5]); - memory_stats[6] = -1; - - /* first interval */ - if (swappgsin < 0) { - swap_stats[4] = 0; - swap_stats[5] = 0; + *infoloadp++ = loaddouble(sysload.ldavg[i]); + } } - /* compute differences between old and new swap statistic */ - else { - swap_stats[4] = pagetok(((nspgsin - swappgsin))); - swap_stats[5] = pagetok(((nspgsout - swappgsout))); + /* convert cp_time counts to percentages */ + total = percentages(CPUSTATES, cpu_states, cp_time, cp_old, cp_diff); + + /* sum memory & swap statistics */ + { + static unsigned int swap_delay = 0; + static int swapavail = 0; + static int swapfree = 0; + static int bufspace = 0; + static int nspgsin, nspgsout; + + GETSYSCTL("vfs.bufspace", bufspace); + GETSYSCTL("vm.stats.vm.v_active_count", memory_stats[0]); + GETSYSCTL("vm.stats.vm.v_inactive_count", memory_stats[1]); + GETSYSCTL("vm.stats.vm.v_wire_count", memory_stats[2]); + GETSYSCTL("vm.stats.vm.v_cache_count", memory_stats[3]); + GETSYSCTL("vm.stats.vm.v_free_count", memory_stats[5]); + GETSYSCTL("vm.stats.vm.v_swappgsin", nspgsin); + GETSYSCTL("vm.stats.vm.v_swappgsout", nspgsout); + /* convert memory stats to Kbytes */ + memory_stats[0] = pagetok(memory_stats[0]); + memory_stats[1] = pagetok(memory_stats[1]); + memory_stats[2] = pagetok(memory_stats[2]); + memory_stats[3] = pagetok(memory_stats[3]); + memory_stats[4] = bufspace / 1024; + memory_stats[5] = pagetok(memory_stats[5]); + memory_stats[6] = -1; + + /* first interval */ + if (swappgsin < 0) { + swap_stats[4] = 0; + swap_stats[5] = 0; + } + + /* compute differences between old and new swap statistic */ + else { + swap_stats[4] = pagetok(((nspgsin - swappgsin))); + swap_stats[5] = pagetok(((nspgsout - swappgsout))); + } + + swappgsin = nspgsin; + swappgsout = nspgsout; + + /* call CPU heavy swapmode() only for changes */ + if (swap_stats[4] > 0 || swap_stats[5] > 0 || swap_delay == 0) { + swap_stats[3] = swapmode(&swapavail, &swapfree); + swap_stats[0] = swapavail; + swap_stats[1] = swapavail - swapfree; + swap_stats[2] = swapfree; + } + swap_delay = 1; + swap_stats[6] = -1; } - swappgsin = nspgsin; - swappgsout = nspgsout; + /* set arrays and strings */ + si->cpustates = cpu_states; + si->memory = memory_stats; + si->swap = swap_stats; - /* call CPU heavy swapmode() only for changes */ - if (swap_stats[4] > 0 || swap_stats[5] > 0 || swap_delay == 0) { - swap_stats[3] = swapmode(&swapavail, &swapfree); - swap_stats[0] = swapavail; - swap_stats[1] = swapavail - swapfree; - swap_stats[2] = swapfree; + + if (lastpid > 0) { + si->last_pid = lastpid; + } else { + si->last_pid = -1; } - swap_delay = 1; - swap_stats[6] = -1; - } - /* set arrays and strings */ - si->cpustates = cpu_states; - si->memory = memory_stats; - si->swap = swap_stats; - - - if(lastpid > 0) { - si->last_pid = lastpid; - } else { - si->last_pid = -1; - } - - /* - * Print how long system has been up. - * (Found by looking getting "boottime" from the kernel) - */ - mib[0] = CTL_KERN; - mib[1] = KERN_BOOTTIME; - bt_size = sizeof(boottime); - if (sysctl(mib, 2, &boottime, &bt_size, NULL, 0) != -1 && - boottime.tv_sec != 0) { - si->boottime = boottime; - } else { - si->boottime.tv_sec = -1; - } + /* + * Print how long system has been up. + * (Found by looking getting "boottime" from the kernel) + */ + mib[0] = CTL_KERN; + mib[1] = KERN_BOOTTIME; + bt_size = sizeof(boottime); + if (sysctl(mib, 2, &boottime, &bt_size, NULL, 0) != -1 && + boottime.tv_sec != 0) { + si->boottime = boottime; + } else { + si->boottime.tv_sec = -1; + } } const struct kinfo_proc * @@ -461,252 +462,250 @@ caddr_t get_process_info(struct system_info *si, struct process_select *sel, int (*compare)()) { - int i; - int total_procs; - long p_io; - long p_inblock, p_oublock, p_majflt; - int active_procs; - struct kinfo_proc **prefp; - struct kinfo_proc *pp; - struct kinfo_proc *prev_pp = NULL; + int i; + int total_procs; + long p_io; + long p_inblock, p_oublock, p_majflt; + int active_procs; + struct kinfo_proc **prefp; + struct kinfo_proc *pp; + struct kinfo_proc *prev_pp = NULL; - /* these are copied out of sel for speed */ - int show_idle; - int show_self; - int show_system; - int show_uid; - int show_command; - - /* - * Save the previous process info. - */ - if (previous_proc_count_max < nproc) { - free(previous_procs); - previous_procs = malloc(nproc * sizeof(struct kinfo_proc)); - free(previous_pref); - previous_pref = malloc(nproc * sizeof(struct kinfo_proc *)); - if (previous_procs == NULL || previous_pref == NULL) { - (void) fprintf(stderr, "top: Out of memory.\n"); - quit(23); - } - previous_proc_count_max = nproc; - } - if (nproc) { - for (i = 0; i < nproc; i++) - previous_pref[i] = &previous_procs[i]; - bcopy(pbase, previous_procs, nproc * sizeof(struct kinfo_proc)); - qsort(previous_pref, nproc, - sizeof(struct kinfo_proc *), compare_pid); - } - previous_proc_count = nproc; - - pbase = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc); - if (nproc > onproc) - pref = (struct kinfo_proc **) realloc(pref, sizeof(struct kinfo_proc *) - * (onproc = nproc)); - if (pref == NULL || pbase == NULL) { - (void) fprintf(stderr, "top: Out of memory.\n"); - quit(23); - } - /* get a pointer to the states summary array */ - si->procstates = process_states; - - /* set up flags which define what we are going to select */ - show_idle = sel->idle; - show_self = sel->self; - show_system = sel->system; - show_uid = sel->uid != -1; - show_command = sel->command != NULL; - - /* count up process states and get pointers to interesting procs */ - total_procs = 0; - active_procs = 0; - total_inblock = 0; - total_oublock = 0; - total_majflt = 0; - memset((char *)process_states, 0, sizeof(process_states)); - prefp = pref; - for (pp = pbase, i = 0; i < nproc; pp++, i++) - { - /* - * Place pointers to each valid proc structure in pref[]. - */ - - if (pp->ki_stat == 0) - /* not in use */ - continue; - - if (!show_self && pp->ki_pid == sel->self) - /* skip self */ - continue; - - if (!show_system && (pp->ki_flag & P_SYSTEM)) - /* skip system process */ - continue; - - p_io = get_io_stats(pp, &p_inblock, &p_oublock, &p_majflt); - total_inblock += p_inblock; - total_oublock += p_oublock; - total_majflt += p_majflt; - total_procs++; - process_states[(unsigned char) pp->ki_stat]++; - - if (pp->ki_stat == SZOMB) - /* skip zombies */ - continue; - - if (displaymode == DISP_CPU && !show_idle && - (pp->ki_pctcpu == 0 || pp->ki_stat != SRUN)) - /* skip idle or non-running processes */ - continue; - - if (displaymode == DISP_IO && !show_idle && p_io == 0) - /* skip processes that aren't doing I/O */ - continue; - - if (show_uid && pp->ki_ruid != (uid_t)sel->uid) - /* skip processes which don't belong to the selected UID */ - continue; + /* these are copied out of sel for speed */ + int show_idle; + int show_self; + int show_system; + int show_uid; + int show_command; /* - * When not showing threads, take the first thread - * for output and add the fields that we can from - * the rest of the process's threads rather than - * using the system's mostly-broken KERN_PROC_PROC. + * Save the previous process info. */ - if (sel->thread || prev_pp == NULL || prev_pp->ki_pid != pp->ki_pid) - { - *prefp++ = pp; - active_procs++; - prev_pp = pp; - } else { - prev_pp->ki_pctcpu += pp->ki_pctcpu; + if (previous_proc_count_max < nproc) { + free(previous_procs); + previous_procs = malloc(nproc * sizeof(struct kinfo_proc)); + free(previous_pref); + previous_pref = malloc(nproc * sizeof(struct kinfo_proc *)); + if (previous_procs == NULL || previous_pref == NULL) { + (void) fprintf(stderr, "top: Out of memory.\n"); + quit(23); + } + previous_proc_count_max = nproc; } - } + if (nproc) { + for (i = 0; i < nproc; i++) + previous_pref[i] = &previous_procs[i]; + bcopy(pbase, previous_procs, nproc * sizeof(struct kinfo_proc)); + qsort(previous_pref, nproc, + sizeof(struct kinfo_proc *), compare_pid); + } + previous_proc_count = nproc; - /* if requested, sort the "interesting" processes */ - if (compare != NULL) - { - qsort((char *)pref, active_procs, sizeof(struct kinfo_proc *), compare); - } + pbase = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc); + if (nproc > onproc) + pref = (struct kinfo_proc **) realloc(pref, sizeof(struct kinfo_proc *) + * (onproc = nproc)); + if (pref == NULL || pbase == NULL) { + (void) fprintf(stderr, "top: Out of memory.\n"); + quit(23); + } + /* get a pointer to the states summary array */ + si->procstates = process_states; - /* remember active and total counts */ - si->p_total = total_procs; - si->p_active = pref_len = active_procs; + /* set up flags which define what we are going to select */ + show_idle = sel->idle; + show_self = sel->self; + show_system = sel->system; + show_uid = sel->uid != -1; + show_command = sel->command != NULL; - /* pass back a handle */ - handle.next_proc = pref; - handle.remaining = active_procs; - return((caddr_t)&handle); + /* count up process states and get pointers to interesting procs */ + total_procs = 0; + active_procs = 0; + total_inblock = 0; + total_oublock = 0; + total_majflt = 0; + memset((char *)process_states, 0, sizeof(process_states)); + prefp = pref; + for (pp = pbase, i = 0; i < nproc; pp++, i++) + { + /* + * Place pointers to each valid proc structure in pref[]. + */ + + if (pp->ki_stat == 0) + /* not in use */ + continue; + + if (!show_self && pp->ki_pid == sel->self) + /* skip self */ + continue; + + if (!show_system && (pp->ki_flag & P_SYSTEM)) + /* skip system process */ + continue; + + p_io = get_io_stats(pp, &p_inblock, &p_oublock, &p_majflt); + total_inblock += p_inblock; + total_oublock += p_oublock; + total_majflt += p_majflt; + total_procs++; + process_states[(unsigned char) pp->ki_stat]++; + + if (pp->ki_stat == SZOMB) + /* skip zombies */ + continue; + + if (displaymode == DISP_CPU && !show_idle && + (pp->ki_pctcpu == 0 || pp->ki_stat != SRUN)) + /* skip idle or non-running processes */ + continue; + + if (displaymode == DISP_IO && !show_idle && p_io == 0) + /* skip processes that aren't doing I/O */ + continue; + + if (show_uid && pp->ki_ruid != (uid_t)sel->uid) + /* skip processes which don't belong to the selected UID */ + continue; + + /* + * When not showing threads, take the first thread + * for output and add the fields that we can from + * the rest of the process's threads rather than + * using the system's mostly-broken KERN_PROC_PROC. + */ + if (sel->thread || prev_pp == NULL || prev_pp->ki_pid != pp->ki_pid) + { + *prefp++ = pp; + active_procs++; + prev_pp = pp; + } else { + prev_pp->ki_pctcpu += pp->ki_pctcpu; + } + } + + /* if requested, sort the "interesting" processes */ + if (compare != NULL) + { + qsort((char *)pref, active_procs, sizeof(struct kinfo_proc *), compare); + } + + /* remember active and total counts */ + si->p_total = total_procs; + si->p_active = pref_len = active_procs; + + /* pass back a handle */ + handle.next_proc = pref; + handle.remaining = active_procs; + return ((caddr_t)&handle); } char fmt[128]; /* static area where result is built */ char * -format_next_process(handle, get_userid) - caddr_t handle; - char *(*get_userid)(); +format_next_process(caddr_t handle, char *(*get_userid)()) { - struct kinfo_proc *pp; - const struct kinfo_proc *oldp; - long cputime; - double pct; - struct handle *hp; - char status[16]; - int state; - struct rusage ru, *rup; - long p_tot, s_tot; + struct kinfo_proc *pp; + const struct kinfo_proc *oldp; + long cputime; + double pct; + struct handle *hp; + char status[16]; + int state; + struct rusage ru, *rup; + long p_tot, s_tot; - /* find and remember the next proc structure */ - hp = (struct handle *)handle; - pp = *(hp->next_proc++); - hp->remaining--; + /* find and remember the next proc structure */ + hp = (struct handle *)handle; + pp = *(hp->next_proc++); + hp->remaining--; - /* get the process's command name */ - if ((pp->ki_sflag & PS_INMEM) == 0) { - /* - * Print swapped processes as - */ - char *comm = pp->ki_comm; + /* get the process's command name */ + if ((pp->ki_sflag & PS_INMEM) == 0) { + /* + * Print swapped processes as + */ + char *comm = pp->ki_comm; #define COMSIZ sizeof(pp->ki_comm) - char buf[COMSIZ]; - (void) strncpy(buf, comm, COMSIZ); - comm[0] = '<'; - (void) strncpy(&comm[1], buf, COMSIZ - 2); - comm[COMSIZ - 2] = '\0'; - (void) strncat(comm, ">", COMSIZ - 1); - comm[COMSIZ - 1] = '\0'; - } + char buf[COMSIZ]; + (void) strncpy(buf, comm, COMSIZ); + comm[0] = '<'; + (void) strncpy(&comm[1], buf, COMSIZ - 2); + comm[COMSIZ - 2] = '\0'; + (void) strncat(comm, ">", COMSIZ - 1); + comm[COMSIZ - 1] = '\0'; + } - /* - * Convert the process's runtime from microseconds to seconds. This - * time includes the interrupt time although that is not wanted here. - * ps(1) is similarly sloppy. - */ - cputime = (pp->ki_runtime + 500000) / 1000000; + /* + * Convert the process's runtime from microseconds to seconds. This + * time includes the interrupt time although that is not wanted here. + * ps(1) is similarly sloppy. + */ + cputime = (pp->ki_runtime + 500000) / 1000000; - /* calculate the base for cpu percentages */ - pct = pctdouble(pp->ki_pctcpu); + /* calculate the base for cpu percentages */ + pct = pctdouble(pp->ki_pctcpu); - /* generate "STATE" field */ - switch (state = pp->ki_stat) { + /* generate "STATE" field */ + switch (state = pp->ki_stat) { case SRUN: - if (smpmode && pp->ki_oncpu != 0xff) - sprintf(status, "CPU%d", pp->ki_oncpu); - else - strcpy(status, "RUN"); - break; + if (smpmode && pp->ki_oncpu != 0xff) + sprintf(status, "CPU%d", pp->ki_oncpu); + else + strcpy(status, "RUN"); + break; case SLOCK: - if (pp->ki_kiflag & KI_LOCKBLOCK) { - sprintf(status, "*%.6s", pp->ki_lockname); - break; - } - /* fall through */ + if (pp->ki_kiflag & KI_LOCKBLOCK) { + sprintf(status, "*%.6s", pp->ki_lockname); + break; + } + /* fall through */ case SSLEEP: - if (pp->ki_wmesg != NULL) { - sprintf(status, "%.6s", pp->ki_wmesg); - break; - } - /* FALLTHROUGH */ + if (pp->ki_wmesg != NULL) { + sprintf(status, "%.6s", pp->ki_wmesg); + break; + } + /* FALLTHROUGH */ default: - if (state >= 0 && - state < sizeof(state_abbrev) / sizeof(*state_abbrev)) - sprintf(status, "%.6s", state_abbrev[(unsigned char) state]); - else - sprintf(status, "?%5d", state); - break; - } + if (state >= 0 && + state < sizeof(state_abbrev) / sizeof(*state_abbrev)) + sprintf(status, "%.6s", state_abbrev[(unsigned char) state]); + else + sprintf(status, "?%5d", state); + break; + } - if (displaymode == DISP_IO) { - oldp = get_old_proc(pp); - if (oldp != NULL) { - ru.ru_inblock = RU(pp)->ru_inblock - RU(oldp)->ru_inblock; - ru.ru_oublock = RU(pp)->ru_oublock - RU(oldp)->ru_oublock; - ru.ru_majflt = RU(pp)->ru_majflt - RU(oldp)->ru_majflt; - rup = &ru; - } else { - rup = RU(pp); - } - p_tot = rup->ru_inblock + rup->ru_oublock + rup->ru_majflt; - s_tot = total_inblock + total_oublock + total_majflt; + if (displaymode == DISP_IO) { + oldp = get_old_proc(pp); + if (oldp != NULL) { + ru.ru_inblock = RU(pp)->ru_inblock - RU(oldp)->ru_inblock; + ru.ru_oublock = RU(pp)->ru_oublock - RU(oldp)->ru_oublock; + ru.ru_majflt = RU(pp)->ru_majflt - RU(oldp)->ru_majflt; + rup = &ru; + } else { + rup = RU(pp); + } + p_tot = rup->ru_inblock + rup->ru_oublock + rup->ru_majflt; + s_tot = total_inblock + total_oublock + total_majflt; - sprintf(fmt, io_Proc_format, - pp->ki_pid, - namelength, namelength, - (*get_userid)(pp->ki_ruid), - (int)rup->ru_inblock, - (int)rup->ru_oublock, - (int)rup->ru_majflt, - (int)p_tot, - p_tot == 0 ? 0.0 : ((float)(p_tot * 100))/(float)s_tot, - screen_width > cmdlengthdelta ? - screen_width - cmdlengthdelta : 0, - printable(pp->ki_comm)); - return (fmt); - } - /* format this entry */ - sprintf(fmt, + sprintf(fmt, io_Proc_format, + pp->ki_pid, + namelength, namelength, + (*get_userid)(pp->ki_ruid), + (int)rup->ru_inblock, + (int)rup->ru_oublock, + (int)rup->ru_majflt, + (int)p_tot, + p_tot == 0 ? 0.0 : ((float)(p_tot * 100))/(float)s_tot, + screen_width > cmdlengthdelta ? + screen_width - cmdlengthdelta : 0, + printable(pp->ki_comm)); + return (fmt); + } + /* format this entry */ + sprintf(fmt, smpmode ? smp_Proc_format : up_Proc_format, pp->ki_pid, namelength, namelength, @@ -731,29 +730,29 @@ format_next_process(handle, get_userid) 100.0 * weighted_cpu(pct, pp), 100.0 * pct, screen_width > cmdlengthdelta ? - screen_width - cmdlengthdelta : - 0, + screen_width - cmdlengthdelta : + 0, printable(pp->ki_comm)); - /* return the result */ - return(fmt); + /* return the result */ + return (fmt); } static void getsysctl(char *name, void *ptr, size_t len) { - size_t nlen = len; + size_t nlen = len; - if (sysctlbyname(name, ptr, &nlen, NULL, 0) == -1) { - fprintf(stderr, "top: sysctl(%s...) failed: %s\n", name, - strerror(errno)); - quit(23); - } - if (nlen != len) { - fprintf(stderr, "top: sysctl(%s...) expected %lu, got %lu\n", name, - (unsigned long)len, (unsigned long)nlen); - quit(23); - } + if (sysctlbyname(name, ptr, &nlen, NULL, 0) == -1) { + fprintf(stderr, "top: sysctl(%s...) failed: %s\n", name, + strerror(errno)); + quit(23); + } + if (nlen != len) { + fprintf(stderr, "top: sysctl(%s...) expected %lu, got %lu\n", name, + (unsigned long)len, (unsigned long)nlen); + quit(23); + } } /* comparison routines for qsort */ @@ -761,13 +760,13 @@ getsysctl(char *name, void *ptr, size_t len) int compare_pid(const void *p1, const void *p2) { - const struct kinfo_proc * const *pp1 = p1; - const struct kinfo_proc * const *pp2 = p2; + const struct kinfo_proc * const *pp1 = p1; + const struct kinfo_proc * const *pp2 = p2; - if ((*pp2)->ki_pid < 0 || (*pp1)->ki_pid < 0) - abort(); + if ((*pp2)->ki_pid < 0 || (*pp1)->ki_pid < 0) + abort(); - return ((*pp1)->ki_pid - (*pp2)->ki_pid); + return ((*pp1)->ki_pid - (*pp2)->ki_pid); } /* @@ -783,13 +782,13 @@ compare_pid(const void *p1, const void *p2) static unsigned char sorted_state[] = { - 0, /* not used */ - 3, /* sleep */ - 1, /* ABANDONED (WAIT) */ - 6, /* run */ - 5, /* start */ - 2, /* zombie */ - 4 /* stop */ + 0, /* not used */ + 3, /* sleep */ + 1, /* ABANDONED (WAIT) */ + 6, /* run */ + 5, /* start */ + 2, /* zombie */ + 4 /* stop */ }; @@ -823,24 +822,24 @@ compare_cpu(struct proc **pp1, struct proc **pp2) proc_compare(struct proc **pp1, struct proc **pp2) #endif { - struct kinfo_proc *p1; - struct kinfo_proc *p2; - int result; - pctcpu lresult; + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; - /* remove one level of indirection */ - p1 = *(struct kinfo_proc **) pp1; - p2 = *(struct kinfo_proc **) pp2; + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; - ORDERKEY_PCTCPU - ORDERKEY_CPTICKS - ORDERKEY_STATE - ORDERKEY_PRIO - ORDERKEY_RSSIZE - ORDERKEY_MEM - ; + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_STATE + ORDERKEY_PRIO + ORDERKEY_RSSIZE + ORDERKEY_MEM + ; - return(result); + return (result); } #ifdef ORDER @@ -848,12 +847,12 @@ proc_compare(struct proc **pp1, struct proc **pp2) int compare_size(), compare_res(), compare_time(), compare_prio(); int (*proc_compares[])() = { - compare_cpu, - compare_size, - compare_res, - compare_time, - compare_prio, - NULL + compare_cpu, + compare_size, + compare_res, + compare_time, + compare_prio, + NULL }; /* compare_size - the comparison function for sorting by total memory usage */ @@ -861,24 +860,24 @@ int (*proc_compares[])() = { int compare_size(struct proc **pp1, struct proc **pp2) { - struct kinfo_proc *p1; - struct kinfo_proc *p2; - int result; - pctcpu lresult; + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; - /* remove one level of indirection */ - p1 = *(struct kinfo_proc **) pp1; - p2 = *(struct kinfo_proc **) pp2; + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; - ORDERKEY_MEM - ORDERKEY_RSSIZE - ORDERKEY_PCTCPU - ORDERKEY_CPTICKS - ORDERKEY_STATE - ORDERKEY_PRIO - ; + ORDERKEY_MEM + ORDERKEY_RSSIZE + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_STATE + ORDERKEY_PRIO + ; - return(result); + return (result); } /* compare_res - the comparison function for sorting by resident set size */ @@ -886,24 +885,24 @@ compare_size(struct proc **pp1, struct proc **pp2) int compare_res(struct proc **pp1, struct proc **pp2) { - struct kinfo_proc *p1; - struct kinfo_proc *p2; - int result; - pctcpu lresult; + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; - /* remove one level of indirection */ - p1 = *(struct kinfo_proc **) pp1; - p2 = *(struct kinfo_proc **) pp2; + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; - ORDERKEY_RSSIZE - ORDERKEY_MEM - ORDERKEY_PCTCPU - ORDERKEY_CPTICKS - ORDERKEY_STATE - ORDERKEY_PRIO - ; + ORDERKEY_RSSIZE + ORDERKEY_MEM + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_STATE + ORDERKEY_PRIO + ; - return(result); + return (result); } /* compare_time - the comparison function for sorting by total cpu time */ @@ -911,49 +910,49 @@ compare_res(struct proc **pp1, struct proc **pp2) int compare_time(struct proc **pp1, struct proc **pp2) { - struct kinfo_proc *p1; - struct kinfo_proc *p2; - int result; - pctcpu lresult; + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; - /* remove one level of indirection */ - p1 = *(struct kinfo_proc **) pp1; - p2 = *(struct kinfo_proc **) pp2; + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; - ORDERKEY_CPTICKS - ORDERKEY_PCTCPU - ORDERKEY_STATE - ORDERKEY_PRIO - ORDERKEY_RSSIZE - ORDERKEY_MEM - ; + ORDERKEY_CPTICKS + ORDERKEY_PCTCPU + ORDERKEY_STATE + ORDERKEY_PRIO + ORDERKEY_RSSIZE + ORDERKEY_MEM + ; - return(result); - } + return (result); +} /* compare_prio - the comparison function for sorting by cpu percentage */ int compare_prio(struct proc **pp1, struct proc **pp2) { - struct kinfo_proc *p1; - struct kinfo_proc *p2; - int result; - pctcpu lresult; + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; - /* remove one level of indirection */ - p1 = *(struct kinfo_proc **) pp1; - p2 = *(struct kinfo_proc **) pp2; + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; - ORDERKEY_PRIO - ORDERKEY_CPTICKS - ORDERKEY_PCTCPU - ORDERKEY_STATE - ORDERKEY_RSSIZE - ORDERKEY_MEM - ; + ORDERKEY_PRIO + ORDERKEY_CPTICKS + ORDERKEY_PCTCPU + ORDERKEY_STATE + ORDERKEY_RSSIZE + ORDERKEY_MEM + ; - return(result); + return (result); } #endif @@ -979,21 +978,21 @@ io_compare(struct proc **pp1, struct proc **pp2) int proc_owner(int pid) { - int cnt; - struct kinfo_proc **prefp; - struct kinfo_proc *pp; + int cnt; + struct kinfo_proc **prefp; + struct kinfo_proc *pp; - prefp = pref; - cnt = pref_len; - while (--cnt >= 0) - { - pp = *prefp++; - if (pp->ki_pid == (pid_t)pid) + prefp = pref; + cnt = pref_len; + while (--cnt >= 0) { - return((int)pp->ki_ruid); + pp = *prefp++; + if (pp->ki_pid == (pid_t)pid) + { + return ((int)pp->ki_ruid); + } } - } - return(-1); + return (-1); } int @@ -1010,12 +1009,12 @@ swapmode(int *retavail, int *retfree) n = kvm_getswapinfo(kd, swapary, 1, 0); if (n < 0 || swapary[0].ksw_total == 0) - return(0); + return (0); *retavail = CONVERT(swapary[0].ksw_total); *retfree = CONVERT(swapary[0].ksw_total - swapary[0].ksw_used); n = (int)((double)swapary[0].ksw_used * 100.0 / (double)swapary[0].ksw_total); - return(n); + return (n); }