From e96d6b6141ddd00db41c21eafcda51ddb7bce2b1 Mon Sep 17 00:00:00 2001 From: albert <> Date: Wed, 2 Oct 2002 12:10:39 +0000 Subject: [PATCH] Avoid opening System.map just to check it, etc. --- proc/devname.c | 5 +++- proc/readproc.c | 46 +++++++++++++++++++++++-------- proc/readproc.h | 10 ++++--- ps/common.h | 5 ++-- ps/display.c | 38 +++++++++++++++++++++---- ps/output.c | 73 +++++++++++++++++++++++++------------------------ ps/sortformat.c | 6 ++-- top.c | 4 +-- 8 files changed, 122 insertions(+), 65 deletions(-) diff --git a/proc/devname.c b/proc/devname.c index a93f1fd9..f41fde20 100644 --- a/proc/devname.c +++ b/proc/devname.c @@ -17,6 +17,7 @@ #include #include #include +#include "version.h" #include "devname.h" #include @@ -195,7 +196,9 @@ int dev_to_tty(char *ret, int chop, int dev, int pid, unsigned int flags) { int i = 0; int c; if((short)dev == (short)-1) goto fail; - if( link_name(tmp, major(dev), minor(dev), pid, "tty" )) goto abbrev; + if(linux_version_code > LINUX_VERSION(2, 5, 0)){ /* didn't get done yet */ + if(link_name(tmp, major(dev), minor(dev), pid, "tty" )) goto abbrev; + } if(driver_name(tmp, major(dev), minor(dev) )) goto abbrev; if( link_name(tmp, major(dev), minor(dev), pid, "fd/2" )) goto abbrev; if( guess_name(tmp, major(dev), minor(dev) )) goto abbrev; diff --git a/proc/readproc.c b/proc/readproc.c index f9f0e8ba..9036b74a 100644 --- a/proc/readproc.c +++ b/proc/readproc.c @@ -373,21 +373,32 @@ next_proc: /* get next PID for consideration */ /* some number->text resolving which is time consuming */ if (Do(FILLUSR)){ strncpy(p->euser, user_from_uid(p->euid), sizeof p->euser); - strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup); if(Do(FILLSTATUS)) { strncpy(p->ruser, user_from_uid(p->ruid), sizeof p->ruser); - strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup); strncpy(p->suser, user_from_uid(p->suid), sizeof p->suser); - strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup); strncpy(p->fuser, user_from_uid(p->fuid), sizeof p->fuser); + } + } + + /* some number->text resolving which is time consuming */ + if (Do(FILLGRP)){ + strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup); + if(Do(FILLSTATUS)) { + strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup); + strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup); strncpy(p->fgroup, group_from_gid(p->fgid), sizeof p->fgroup); } } if (Do(FILLCMD)) /* read+parse /proc/#/cmdline */ p->cmdline = file2strvec(path, "cmdline"); + else + p->cmdline = NULL; + if (Do(FILLENV)) /* read+parse /proc/#/environ */ p->environ = file2strvec(path, "environ"); + else + p->environ = NULL; if (p->state == 'Z') /* fixup cmd for zombies */ strncat(p->cmd," ", sizeof p->cmd); @@ -448,10 +459,10 @@ next_proc: /* get next PID for consideration */ goto next_proc; /* error reading /proc/#/stat */ stat2proc(sbuf, p); /* parse /proc/#/stat */ -/* if (Do(FILLMEM)) {*/ /* read, parse /proc/#/statm */ + if (Do(FILLMEM)) { /* read, parse /proc/#/statm */ if ((file2str(path, "statm", sbuf, sizeof sbuf)) != -1 ) statm2proc(sbuf, p); /* ignore statm errors here */ -/* } */ /* statm fields just zero */ + } /* statm fields just zero */ /* if (Do(FILLSTATUS)) { */ /* read, parse /proc/#/status */ if ((file2str(path, "status", sbuf, sizeof sbuf)) != -1 ){ @@ -460,23 +471,34 @@ next_proc: /* get next PID for consideration */ /* }*/ /* some number->text resolving which is time consuming */ - /* if (Do(FILLUSR)){ */ + if (Do(FILLUSR)){ strncpy(p->euser, user_from_uid(p->euid), sizeof p->euser); - strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup); /* if(Do(FILLSTATUS)) { */ strncpy(p->ruser, user_from_uid(p->ruid), sizeof p->ruser); - strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup); strncpy(p->suser, user_from_uid(p->suid), sizeof p->suser); - strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup); strncpy(p->fuser, user_from_uid(p->fuid), sizeof p->fuser); +/* }*/ + } + + /* some number->text resolving which is time consuming */ + if (Do(FILLGRP)){ + strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup); +/* if(Do(FILLSTATUS)) { */ + strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup); + strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup); strncpy(p->fgroup, group_from_gid(p->fgid), sizeof p->fgroup); /* }*/ -/* }*/ + } -/* if (Do(FILLCMD)) */ /* read+parse /proc/#/cmdline */ + if (Do(FILLCMD)) /* read+parse /proc/#/cmdline */ p->cmdline = file2strvec(path, "cmdline"); -/* if (Do(FILLENV)) */ /* read+parse /proc/#/environ */ + else + p->cmdline = NULL; + + if (Do(FILLENV)) /* read+parse /proc/#/environ */ p->environ = file2strvec(path, "environ"); + else + p->environ = NULL; if (p->state == 'Z') /* fixup cmd for zombies */ strncat(p->cmd," ", sizeof p->cmd); diff --git a/proc/readproc.h b/proc/readproc.h index ea1d67c2..a9127db9 100644 --- a/proc/readproc.h +++ b/proc/readproc.h @@ -194,10 +194,12 @@ extern void freeproc(proc_t* p); #define PROC_FILLMEM 0x01 /* read statm into the appropriate proc_t entries */ #define PROC_FILLCMD 0x02 /* alloc and fill in `cmdline' part of proc_t */ #define PROC_FILLENV 0x04 /* alloc and fill in `environ' part of proc_t */ -#define PROC_FILLUSR 0x08 /* resolve user id number -> user name via passwd */ -#define PROC_FILLSTATUS 0x10 -#define PROC_FILLSTAT 0x20 -#define PROC_FILLBUG 0x3f /* No idea what we need */ +#define PROC_FILLUSR 0x08 /* resolve user id number -> user name */ +#define PROC_FILLGRP 0x10 /* resolve group id number -> group name */ +#define PROC_FILLSTATUS 0x20 +#define PROC_FILLSTAT 0x40 +#define PROC_FILLWCHAN 0x80 +#define PROC_FILLBUG 0xff /* No idea what we need */ /* Obsolete, consider only processes with one of the passed: */ diff --git a/ps/common.h b/ps/common.h index e6d9ea1c..c0fc2f6f 100644 --- a/ps/common.h +++ b/ps/common.h @@ -165,6 +165,7 @@ typedef struct sort_node { int (*sr)(const proc_t* P, const proc_t* Q); /* sort function */ int reverse; /* can sort backwards */ int typecode; + int need; } sort_node; typedef struct format_node { @@ -173,7 +174,7 @@ typedef struct format_node { int (*pr)(void); /* print function */ /* int (* const sr)(const proc_t* P, const proc_t* Q); */ /* sort function */ int width; - int pad; + int need; int vendor; /* Vendor that invented this */ int flags; int typecode; @@ -185,7 +186,7 @@ typedef struct format_struct { int (* const pr)(void); /* print function */ int (* const sr)(const proc_t* P, const proc_t* Q); /* sort function */ const int width; - const int pad; /* could be second width */ + const int need; /* data we will need (files to read, etc.) */ const int vendor; /* Where does this come from? */ const int flags; } format_struct; diff --git a/ps/display.c b/ps/display.c index 79206809..8243f371 100644 --- a/ps/display.c +++ b/ps/display.c @@ -183,6 +183,29 @@ static void check_headers(void){ if(!head_normal) lines_to_next_header = -1; /* how UNIX does --noheader */ } +static unsigned needs_for_format; +static unsigned needs_for_sort; + +/***** check needs */ +/* see what files need to be read, etc. */ +static void check_needs(void){ + format_node *walk_pr = format_list; + sort_node *walk_sr = sort_list; + /* selection doesn't currently have expensive needs */ + + while(walk_pr){ + needs_for_format |= walk_pr->need; + walk_pr = walk_pr->next; + } + if(bsd_e_option) needs_for_format |= PROC_FILLENV; + + while(walk_sr){ + needs_for_sort |= walk_sr->need; + walk_sr = walk_sr->next; + } + +} + /***** fill in %CPU; not in libproc because of include_dead_children */ static void fill_pcpu(proc_t *buf){ unsigned long total_time; @@ -200,19 +223,19 @@ static void fill_pcpu(proc_t *buf){ static void simple_spew(void){ proc_t buf; PROCTAB* ptp; - ptp = openproc(PROC_FILLBUG); + ptp = openproc(needs_for_format | needs_for_sort | PROC_FILLCMD); if(!ptp) { fprintf(stderr, "Error: can not access /proc.\n"); exit(1); } - memset(&buf, '#', sizeof(proc_t)); + /* memset(&buf, '#', sizeof(proc_t)); */ /* use "ps_" prefix to catch library mismatch */ while(ps_readproc(ptp,&buf)){ fill_pcpu(&buf); if(want_this_proc(&buf)) show_one_proc(&buf); /* if(buf.cmdline) free(buf.cmdline); */ /* these crash */ /* if(buf.environ) free(buf.environ); */ - memset(&buf, '#', sizeof(proc_t)); + /* memset(&buf, '#', sizeof(proc_t)); */ } closeproc(ptp); } @@ -337,7 +360,7 @@ static void fancy_spew(void){ proc_t *retbuf = NULL; PROCTAB* ptp; int n = 0; /* number of processes & index into array */ - ptp = openproc(PROC_FILLBUG); + ptp = openproc(needs_for_format | needs_for_sort | PROC_FILLCMD); if(!ptp) { fprintf(stderr, "Error: can not access /proc.\n"); exit(1); @@ -395,7 +418,12 @@ int main(int argc, char *argv[]){ init_output(); /* must be between parser and output */ check_headers(); - if (open_psdb(namelist_file)) wchan_is_number = 1; + check_needs(); + + /* filthy hack -- got to unify some stuff here */ + if( ( (needs_for_format|needs_for_sort) & PROC_FILLWCHAN) && !wchan_is_number) + if (open_psdb(namelist_file)) wchan_is_number = 1; + if(forest_type || sort_list) fancy_spew(); /* sort or forest */ else simple_spew(); /* no sort, no forest */ show_one_proc((proc_t *)-1); /* no output yet? */ diff --git a/ps/output.c b/ps/output.c index 091e3b95..aed7366d 100644 --- a/ps/output.c +++ b/ps/output.c @@ -1085,8 +1085,9 @@ static int sr_context ( const proc_t* P, const proc_t* Q ) { #define MEM PROC_FILLMEM /* read statm */ #define CMD PROC_FILLCMD /* read cmdline */ #define ENV PROC_FILLENV /* read environ */ -#define USR PROC_FILLUSR /* uid_t and gid_t -> user and group names */ -#define BUG PROC_FILLBUG /* what does this need? */ +#define USR PROC_FILLUSR /* uid_t -> user names */ +#define GRP PROC_FILLGRP /* gid_t -> group names */ +#define WCH PROC_FILLWCHAN /* do WCHAN lookup */ /* TODO * pull out annoying BSD aliases into another table (to macro table?) @@ -1100,7 +1101,7 @@ static int sr_context ( const proc_t* P, const proc_t* Q ) { /* Many of these are placeholders for unsupported options. */ static const format_struct format_array[] = { -/* code header print() sort() width ? vendor flags */ +/* code header print() sort() width need vendor flags */ {"%cpu", "%CPU", pr_pcpu, sr_pcpu, 4, 0, BSD, RIGHT}, /*pcpu*/ {"%mem", "%MEM", pr_pmem, sr_nop, 4, 0, BSD, RIGHT}, /*pmem*/ {"acflag", "ACFLG", pr_nop, sr_nop, 5, 0, XXX, RIGHT}, /*acflg*/ @@ -1133,31 +1134,31 @@ static const format_struct format_array[] = { {"cursig", "CURSIG", pr_nop, sr_nop, 6, 0, DEC, RIGHT}, {"cutime", "-", pr_nop, sr_cutime, 1, 0, LNX, RIGHT}, {"cwd", "CWD", pr_nop, sr_nop, 3, 0, LNX, LEFT}, -{"drs", "DRS", pr_drs, sr_drs, 4, 0, LNX, RIGHT}, +{"drs", "DRS", pr_drs, sr_drs, 4, MEM, LNX, RIGHT}, {"dsiz", "DSIZ", pr_dsiz, sr_nop, 4, 0, LNX, RIGHT}, {"egid", "EGID", pr_egid, sr_egid, 5, 0, LNX, RIGHT}, -{"egroup", "EGROUP", pr_egroup, sr_egroup, 8, 0, LNX, USER}, +{"egroup", "EGROUP", pr_egroup, sr_egroup, 8, GRP, LNX, USER}, {"eip", "EIP", pr_eip, sr_kstk_eip, 8, 0, LNX, RIGHT}, {"end_code", "E_CODE", pr_nop, sr_end_code, 8, 0, LNx, RIGHT}, -{"environ","ENVIRONMENT",pr_nop, sr_nop, 11, 0, LNx, UNLIMITED}, +{"environ","ENVIRONMENT",pr_nop, sr_nop, 11, ENV, LNx, UNLIMITED}, {"esp", "ESP", pr_esp, sr_kstk_esp, 8, 0, LNX, RIGHT}, {"etime", "ELAPSED", pr_etime, sr_nop, 11, 0, U98, RIGHT}, /* was 7 wide */ {"euid", "EUID", pr_euid, sr_euid, 5, 0, LNX, RIGHT}, -{"euser", "EUSER", pr_euser, sr_euser, 8, 0, LNX, USER}, +{"euser", "EUSER", pr_euser, sr_euser, 8, USR, LNX, USER}, {"f", "F", pr_flag, sr_nop, 1, 0, XXX, RIGHT}, /*flags*/ {"fgid", "FGID", pr_fgid, sr_fgid, 5, 0, LNX, RIGHT}, -{"fgroup", "FGROUP", pr_fgroup, sr_fgroup, 8, 0, LNX, USER}, +{"fgroup", "FGROUP", pr_fgroup, sr_fgroup, 8, GRP, LNX, USER}, {"flag", "F", pr_flag, sr_flags, 1, 0, DEC, RIGHT}, {"flags", "F", pr_flag, sr_flags, 1, 0, BSD, RIGHT}, /*f*/ /* was FLAGS, 8 wide */ {"fname", "COMMAND", pr_fname, sr_nop, 8, 0, SUN, LEFT}, {"fsgid", "FSGID", pr_fgid, sr_fgid, 5, 0, LNX, RIGHT}, -{"fsgroup", "FSGROUP", pr_fgroup, sr_fgroup, 8, 0, LNX, USER}, +{"fsgroup", "FSGROUP", pr_fgroup, sr_fgroup, 8, GRP, LNX, USER}, {"fsuid", "FSUID", pr_fuid, sr_fuid, 5, 0, LNX, RIGHT}, -{"fsuser", "FSUSER", pr_fuser, sr_fuser, 8, 0, LNX, USER}, +{"fsuser", "FSUSER", pr_fuser, sr_fuser, 8, USR, LNX, USER}, {"fuid", "FUID", pr_fuid, sr_fuid, 5, 0, LNX, RIGHT}, -{"fuser", "FUSER", pr_fuser, sr_fuser, 8, 0, LNX, USER}, +{"fuser", "FUSER", pr_fuser, sr_fuser, 8, USR, LNX, USER}, {"gid", "GID", pr_egid, sr_egid, 5, 0, SUN, RIGHT}, -{"group", "GROUP", pr_egroup, sr_egroup, 5, 0, U98, USER}, /* was 8 wide */ +{"group", "GROUP", pr_egroup, sr_egroup, 5, GRP, U98, USER}, /* was 8 wide */ {"ignored", "IGNORED", pr_sigignore,sr_nop, 9, 0, BSD, SIGNAL}, /*sigignore*/ {"inblk", "INBLK", pr_nop, sr_nop, 5, 0, BSD, RIGHT}, /*inblock*/ {"inblock", "INBLK", pr_nop, sr_nop, 5, 0, DEC, RIGHT}, /*inblk*/ @@ -1172,16 +1173,16 @@ static const format_struct format_array[] = { {"longtname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, LEFT}, {"lstart", "STARTED", pr_lstart, sr_nop, 24, 0, XXX, RIGHT}, {"luid", "LUID", pr_nop, sr_nop, 5, 0, LNX, RIGHT}, /* login ID */ -{"luser", "LUSER", pr_nop, sr_nop, 8, 0, LNX, USER}, /* login USER */ +{"luser", "LUSER", pr_nop, sr_nop, 8, USR, LNX, USER}, /* login USER */ {"lwp", "LWP", pr_thread, sr_nop, 5, 0, SUN, RIGHT}, -{"m_drs", "DRS", pr_drs, sr_drs, 5, 0, LNx, RIGHT}, -{"m_dt", "DT", pr_nop, sr_dt, 4, 0, LNx, RIGHT}, -{"m_lrs", "LRS", pr_nop, sr_lrs, 5, 0, LNx, RIGHT}, -{"m_resident", "RES", pr_nop, sr_resident, 5, 0, LNx, RIGHT}, -{"m_share", "SHRD", pr_nop, sr_share, 5, 0, LNx, RIGHT}, -{"m_size", "SIZE", pr_nop, sr_size, 5, 0, LNx, RIGHT}, +{"m_drs", "DRS", pr_drs, sr_drs, 5, MEM, LNx, RIGHT}, +{"m_dt", "DT", pr_nop, sr_dt, 4, MEM, LNx, RIGHT}, +{"m_lrs", "LRS", pr_nop, sr_lrs, 5, MEM, LNx, RIGHT}, +{"m_resident", "RES", pr_nop, sr_resident, 5,MEM, LNx, RIGHT}, +{"m_share", "SHRD", pr_nop, sr_share, 5, MEM, LNx, RIGHT}, +{"m_size", "SIZE", pr_nop, sr_size, 5, MEM, LNx, RIGHT}, {"m_swap", "SWAP", pr_nop, sr_nop, 5, 0, LNx, RIGHT}, -{"m_trs", "TRS", pr_trs, sr_trs, 5, 0, LNx, RIGHT}, +{"m_trs", "TRS", pr_trs, sr_trs, 5, MEM, LNx, RIGHT}, {"maj_flt", "MAJFL", pr_majflt, sr_maj_flt, 6, 0, LNX, CUMUL|RIGHT}, {"majflt", "MAJFLT", pr_majflt, sr_maj_flt, 6, 0, XXX, RIGHT}, {"min_flt", "MINFL", pr_minflt, sr_min_flt, 6, 0, LNX, CUMUL|RIGHT}, @@ -1221,16 +1222,16 @@ static const format_struct format_array[] = { {"psr", "PSR", pr_psr, sr_nop, 3, 0, DEC, RIGHT}, {"psxpri", "PPR", pr_nop, sr_nop, 3, 0, DEC, RIGHT}, {"re", "RE", pr_nop, sr_nop, 3, 0, BSD, RIGHT}, -{"resident", "RES", pr_nop, sr_resident, 5, 0, LNX, RIGHT}, +{"resident", "RES", pr_nop, sr_resident, 5,MEM, LNX, RIGHT}, {"rgid", "RGID", pr_rgid, sr_rgid, 5, 0, XXX, RIGHT}, -{"rgroup", "RGROUP", pr_rgroup, sr_rgroup, 6, 0, U98, USER}, /* was 8 wide */ +{"rgroup", "RGROUP", pr_rgroup, sr_rgroup, 8, GRP, U98, USER}, /* was 8 wide */ {"rlink", "RLINK", pr_nop, sr_nop, 8, 0, BSD, RIGHT}, {"rss", "RSS", pr_rss, sr_rss, 4, 0, XXX, RIGHT}, /* was 5 wide */ {"rssize", "RSS", pr_rss, sr_vm_rss, 4, 0, DEC, RIGHT}, /*rsz*/ {"rsz", "RSZ", pr_rss, sr_vm_rss, 4, 0, BSD, RIGHT}, /*rssize*/ {"rtprio", "RTPRIO", pr_nop, sr_nop, 7, 0, BSD, RIGHT}, {"ruid", "RUID", pr_ruid, sr_ruid, 5, 0, XXX, RIGHT}, -{"ruser", "RUSER", pr_ruser, sr_ruser, 8, 0, U98, USER}, +{"ruser", "RUSER", pr_ruser, sr_ruser, 8, USR, U98, USER}, {"s", "S", pr_s, sr_state, 1, 0, SUN, LEFT}, /*stat,state*/ {"sched", "SCH", pr_nop, sr_nop, 1, 0, AIX, RIGHT}, {"scnt", "SCNT", pr_nop, sr_nop, 4, 0, DEC, RIGHT}, /* man page misspelling of scount? */ @@ -1241,8 +1242,8 @@ static const format_struct format_array[] = { {"sgi_p", "P", pr_sgi_p, sr_nop, 1, 0, LNX, RIGHT}, /* "cpu" number */ {"sgi_rss", "RSS", pr_rss, sr_nop, 4, 0, LNX, LEFT}, /* SZ:RSS */ {"sgid", "SGID", pr_sgid, sr_sgid, 5, 0, LNX, RIGHT}, -{"sgroup", "SGROUP", pr_sgroup, sr_sgroup, 8, 0, LNX, USER}, -{"share", "-", pr_nop, sr_share, 1, 0, LNX, RIGHT}, +{"sgroup", "SGROUP", pr_sgroup, sr_sgroup, 8, GRP, LNX, USER}, +{"share", "-", pr_nop, sr_share, 1, MEM, LNX, RIGHT}, {"sid", "SID", pr_sess, sr_session, 5, 0, XXX, RIGHT}, /* Sun & HP */ {"sig", "PENDING", pr_sig, sr_nop, 9, 0, XXX, SIGNAL}, /*pending*/ {"sig_block", "BLOCKED", pr_sigmask, sr_nop, 9, 0, LNX, SIGNAL}, @@ -1252,7 +1253,7 @@ static const format_struct format_array[] = { {"sigcatch", "CAUGHT", pr_sigcatch, sr_nop, 9, 0, XXX, SIGNAL}, /*caught*/ {"sigignore", "IGNORED", pr_sigignore,sr_nop, 9, 0, XXX, SIGNAL}, /*ignored*/ {"sigmask", "BLOCKED", pr_sigmask, sr_nop, 9, 0, XXX, SIGNAL}, /*blocked*/ -{"size", "-", pr_nop, sr_size, 1, 0, SCO, RIGHT}, +{"size", "-", pr_nop, sr_size, 1, MEM, SCO, RIGHT}, {"sl", "SL", pr_nop, sr_nop, 3, 0, XXX, RIGHT}, {"spid", "SPID", pr_thread, sr_nop, 5, 0, SGI, RIGHT}, {"stackp", "STACKP", pr_stackp, sr_nop, 8, 0, LNX, RIGHT}, /*start_stack*/ @@ -1265,11 +1266,11 @@ static const format_struct format_array[] = { {"status", "STATUS", pr_nop, sr_nop, 6, 0, DEC, RIGHT}, {"stime", "STIME", pr_stime, sr_stime, 5, 0, XXX, /* CUMUL| */RIGHT}, /* was 6 wide */ {"suid", "SUID", pr_suid, sr_suid, 5, 0, LNx, RIGHT}, -{"suser", "SUSER", pr_suser, sr_suser, 8, 0, LNx, USER}, +{"suser", "SUSER", pr_suser, sr_suser, 8, USR, LNx, USER}, {"svgid", "SVGID", pr_sgid, sr_sgid, 5, 0, XXX, RIGHT}, -{"svgroup", "SVGROUP", pr_sgroup, sr_sgroup, 8, 0, LNX, USER}, +{"svgroup", "SVGROUP", pr_sgroup, sr_sgroup, 8, GRP, LNX, USER}, {"svuid", "SVUID", pr_suid, sr_suid, 5, 0, XXX, RIGHT}, -{"svuser", "SVUSER", pr_suser, sr_suser, 8, 0, LNX, USER}, +{"svuser", "SVUSER", pr_suser, sr_suser, 8, USR, LNX, USER}, {"systime", "SYSTEM", pr_nop, sr_nop, 6, 0, DEC, RIGHT}, {"sz", "SZ", pr_sz, sr_nop, 5, 0, HPU, RIGHT}, {"tdev", "TDEV", pr_nop, sr_nop, 4, 0, XXX, RIGHT}, @@ -1280,8 +1281,8 @@ static const format_struct format_array[] = { {"tmout", "TMOUT", pr_timeout, sr_timeout, 5, 0, LNX, RIGHT}, {"tname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, LEFT}, {"tpgid", "TPGID", pr_tpgid, sr_tpgid, 5, 0, XXX, RIGHT}, -{"trs", "TRS", pr_trs, sr_trs, 4, 0, AIX, RIGHT}, -{"trss", "TRSS", pr_trs, sr_trs, 4, 0, BSD, RIGHT}, /* 4.3BSD NET/2 */ +{"trs", "TRS", pr_trs, sr_trs, 4, MEM, AIX, RIGHT}, +{"trss", "TRSS", pr_trs, sr_trs, 4, MEM, BSD, RIGHT}, /* 4.3BSD NET/2 */ {"tsess", "TSESS", pr_nop, sr_nop, 5, 0, BSD, RIGHT}, {"tsession", "TSESS", pr_nop, sr_nop, 5, 0, DEC, RIGHT}, {"tsiz", "TSIZ", pr_tsiz, sr_nop, 4, 0, BSD, RIGHT}, @@ -1293,12 +1294,12 @@ static const format_struct format_array[] = { {"ucmd", "CMD", pr_comm, sr_cmd, 16, 0, DEC, UNLIMITED}, /*ucomm*/ {"ucomm", "COMMAND", pr_comm, sr_nop, 16, 0, XXX, UNLIMITED}, /*comm*/ {"uid", "UID", pr_euid, sr_euid, 5, 0, XXX, RIGHT}, -{"uid_hack", "UID", pr_euser, sr_nop, 8, 0, XXX, USER}, +{"uid_hack", "UID", pr_euser, sr_nop, 8, USR, XXX, USER}, {"umask", "UMASK", pr_nop, sr_nop, 5, 0, DEC, RIGHT}, -{"uname", "USER", pr_euser, sr_euser, 8, 0, DEC, USER}, /* man page misspelling of user? */ +{"uname", "USER", pr_euser, sr_euser, 8, USR, DEC, USER}, /* man page misspelling of user? */ {"upr", "UPR", pr_nop, sr_nop, 3, 0, BSD, RIGHT}, /*usrpri*/ {"uprocp", "-", pr_nop, sr_nop, 1, 0, BSD, RIGHT}, -{"user", "USER", pr_euser, sr_euser, 8, 0, U98, USER}, /* BSD n forces this to UID */ +{"user", "USER", pr_euser, sr_euser, 8, USR, U98, USER}, /* BSD n forces this to UID */ {"usertime", "USER", pr_nop, sr_nop, 4, 0, DEC, RIGHT}, {"usrpri", "UPR", pr_nop, sr_nop, 3, 0, DEC, RIGHT}, /*upr*/ {"utime", "UTIME", pr_nop, sr_utime, 6, 0, LNx, CUMUL|RIGHT}, @@ -1309,8 +1310,8 @@ static const format_struct format_array[] = { {"vm_stack", "STACK", pr_nop, sr_vm_stack, 5, 0, LNx, RIGHT}, {"vsize", "VSZ", pr_vsz, sr_vsize, 5, 0, DEC, RIGHT}, /*vsz*/ {"vsz", "VSZ", pr_vsz, sr_vm_size, 5, 0, U98, RIGHT}, /*vsize*/ -{"wchan", "WCHAN", pr_wchan, sr_wchan, 6, 0, XXX, WCHAN}, /* BSD n forces this to nwchan */ /* was 10 wide */ -{"wname", "WCHAN", pr_wname, sr_nop, 6, 0, SGI, WCHAN}, /* opposite of nwchan */ +{"wchan", "WCHAN", pr_wchan, sr_wchan, 6, WCH, XXX, WCHAN}, /* BSD n forces this to nwchan */ /* was 10 wide */ +{"wname", "WCHAN", pr_wname, sr_nop, 6, WCH, SGI, WCHAN}, /* opposite of nwchan */ {"xstat", "XSTAT", pr_nop, sr_nop, 5, 0, BSD, RIGHT}, {"~", "-", pr_nop, sr_nop, 1, 0, LNX, RIGHT} /* NULL would ruin alphabetical order */ }; diff --git a/ps/sortformat.c b/ps/sortformat.c index c6f7e64d..3e71b3ad 100644 --- a/ps/sortformat.c +++ b/ps/sortformat.c @@ -57,7 +57,7 @@ static format_node *do_one_spec(const char *spec, const char *override){ strcpy(thisnode->name, fs->head); } thisnode->pr = fs->pr; - thisnode->pad = fs->pad; + thisnode->need = fs->need; thisnode->vendor = fs->vendor; thisnode->flags = fs->flags; thisnode->next = NULL; @@ -183,7 +183,7 @@ double_percent: fnode->name = malloc(len+1); strcpy(fnode->name, buf); fnode->pr = NULL; /* checked for */ - fnode->pad = 0; + fnode->need = 0; fnode->vendor = AIX; fnode->flags = 0; fnode->next = NULL; @@ -669,7 +669,7 @@ static const char *generate_sysv_list(void){ fn->name = malloc(2); strcpy(fn->name, ":"); fn->pr = NULL; /* checked for */ - fn->pad = 0; + fn->need = 0; fn->vendor = AIX; /* yes, for SGI weirdness */ fn->flags = 0; fn->next = format_list; diff --git a/top.c b/top.c index 0d0e2d9f..c417802d 100644 --- a/top.c +++ b/top.c @@ -807,9 +807,9 @@ static void *alloc_r (void *q, unsigned numb) * as follows: * cpus[0] thru cpus[n] == tics for each separate cpu * cpus[Cpu_tot] == tics from the 1st /proc/stat line */ +#include static CPUS_t *refreshcpus (CPUS_t *cpus) { -#include static FILE *fp = NULL; int i; @@ -856,7 +856,7 @@ static proc_t **refreshprocs (proc_t **tbl) #define PTRsz sizeof(proc_t *) /* eyeball candy */ #define ENTsz sizeof(proc_t) static int flags = PROC_FILLMEM | PROC_FILLCMD | PROC_FILLUSR - | PROC_FILLSTATUS | PROC_FILLSTAT; + | PROC_FILLGRP | PROC_FILLSTATUS | PROC_FILLSTAT; static unsigned savmax = 0; /* first time, Bypass: (i) */ proc_t *ptsk = (proc_t *)-1; /* first time, Force: (ii) */ unsigned curmax = 0; /* every time (jeeze) */