Avoid opening System.map just to check it, etc.
This commit is contained in:
parent
7b1aebf7c4
commit
e96d6b6141
@ -17,6 +17,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/sysmacros.h>
|
||||
#include "version.h"
|
||||
#include "devname.h"
|
||||
|
||||
#include <asm/page.h>
|
||||
@ -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;
|
||||
|
@ -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," <defunct>", 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," <defunct>", sizeof p->cmd);
|
||||
|
@ -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: */
|
||||
|
@ -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;
|
||||
|
38
ps/display.c
38
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? */
|
||||
|
73
ps/output.c
73
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 */
|
||||
};
|
||||
|
@ -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;
|
||||
|
4
top.c
4
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 <fcntl.h>
|
||||
static CPUS_t *refreshcpus (CPUS_t *cpus)
|
||||
{
|
||||
#include <fcntl.h>
|
||||
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) */
|
||||
|
Loading…
x
Reference in New Issue
Block a user