more per-process stuff
This commit is contained in:
parent
35859fb0a8
commit
71312f1516
2
NEWS
2
NEWS
@ -1,6 +1,8 @@
|
|||||||
procps-3.1.13 --> procps-3.1.14
|
procps-3.1.13 --> procps-3.1.14
|
||||||
|
|
||||||
handle 32-bit dev_t of Linux 2.6
|
handle 32-bit dev_t of Linux 2.6
|
||||||
|
ps: finally, m and -m satisfy the original design
|
||||||
|
ps: distinct per-thread and whole-process pending signals
|
||||||
|
|
||||||
procps-3.1.12 --> procps-3.1.13
|
procps-3.1.12 --> procps-3.1.13
|
||||||
|
|
||||||
|
29
TODO
29
TODO
@ -14,27 +14,11 @@ Cache results of dev_to_tty.
|
|||||||
Add an "adopted child" flag to mark processes that are not
|
Add an "adopted child" flag to mark processes that are not
|
||||||
natural children of init. This can make --forest work better.
|
natural children of init. This can make --forest work better.
|
||||||
|
|
||||||
Add a thread group ID, to be shared by all tasks that are related by
|
|
||||||
the clone() system call. This ID might be made unique from boot to
|
|
||||||
shutdown, perhaps being a 16-bit CPU number and 48-bit per-CPU
|
|
||||||
serial number.
|
|
||||||
|
|
||||||
Make the kernel group /proc listing output by thread group.
|
|
||||||
Without this, a thread-aware ps must always sort processes.
|
|
||||||
|
|
||||||
Supply the task ID (the "PID"/"TID") of the thread group leader.
|
|
||||||
I define "leader" as the first process of a thread group.
|
|
||||||
|
|
||||||
Don't reuse the task ID of a thread group leader until all threads
|
|
||||||
are dead. Better yet, don't let the leader exit.
|
|
||||||
|
|
||||||
Supply better data for top's CPU state display. Currently top has
|
Supply better data for top's CPU state display. Currently top has
|
||||||
to subtract old numbers from new numbers and divide that result by
|
to subtract old numbers from new numbers and divide that result by
|
||||||
the number of processors. The kernel won't even supply the number
|
the number of processors. The kernel won't even supply the number
|
||||||
of processors in a portable way.
|
of processors in a portable way.
|
||||||
|
|
||||||
Mark threads, and supply a list of other threads.
|
|
||||||
|
|
||||||
Supply data for the ADDR and JOBC fields.
|
Supply data for the ADDR and JOBC fields.
|
||||||
|
|
||||||
Support & supply data for SL and RE.
|
Support & supply data for SL and RE.
|
||||||
@ -42,9 +26,6 @@ Support & supply data for SL and RE.
|
|||||||
Add a /proc/*/tty symlink to eliminate guessing when /proc/*/fd is
|
Add a /proc/*/tty symlink to eliminate guessing when /proc/*/fd is
|
||||||
not accessable.
|
not accessable.
|
||||||
|
|
||||||
Put unique ID at the top of System.map and in /proc, to make sure
|
|
||||||
there is never a mismatch.
|
|
||||||
|
|
||||||
Add /proc/*/.bindata files to avoid string parsing. It should be an array
|
Add /proc/*/.bindata files to avoid string parsing. It should be an array
|
||||||
of 64-bit values on all machines. New entries go on the end and obsolete
|
of 64-bit values on all machines. New entries go on the end and obsolete
|
||||||
ones get filled in with something logical -- entries must never be deleted!
|
ones get filled in with something logical -- entries must never be deleted!
|
||||||
@ -61,9 +42,7 @@ arbitrary data for the FROM column. (could set root's VGA color map!)
|
|||||||
|
|
||||||
---------------------- vmstat --------------------------
|
---------------------- vmstat --------------------------
|
||||||
|
|
||||||
Extract /proc/stat parsing from vmstat into libproc somewhere.
|
Extract /proc/diskstats parsing from vmstat into libproc somewhere.
|
||||||
|
|
||||||
Let the user choose: 1000, 1024, PAGE_SIZE, 1000000, 0x100000
|
|
||||||
|
|
||||||
--------------------- libproc ----------------------
|
--------------------- libproc ----------------------
|
||||||
|
|
||||||
@ -74,6 +53,8 @@ units: kB and pages, seconds and jiffies) in the proc_t struct.
|
|||||||
|
|
||||||
Share more stuff with ps.
|
Share more stuff with ps.
|
||||||
|
|
||||||
|
'H' command
|
||||||
|
|
||||||
---------------- ps for now, maybe move to libproc ------------------
|
---------------- ps for now, maybe move to libproc ------------------
|
||||||
|
|
||||||
With forest output and a tty named /dev/this_is_my_tty, the position
|
With forest output and a tty named /dev/this_is_my_tty, the position
|
||||||
@ -139,10 +120,6 @@ Try to make -jl fit in 80 columns. Do we need more than 1000 pty devices,
|
|||||||
9 flag bits, etc.? (hmmm, Linux supports 2048 pty devices now, and we
|
9 flag bits, etc.? (hmmm, Linux supports 2048 pty devices now, and we
|
||||||
might also want to steal whitespace there when the time column overflows)
|
might also want to steal whitespace there when the time column overflows)
|
||||||
|
|
||||||
When not in strict Unix98 mode, let foo=8 specify that foo is 8
|
|
||||||
characters wide. Debian did that. Then foo=8=bar and foo=bar=8
|
|
||||||
could change both header and width.
|
|
||||||
|
|
||||||
Better unmangling of '?' as a tty. The shell destroys '?' when there
|
Better unmangling of '?' as a tty. The shell destroys '?' when there
|
||||||
is a filename that matches. If the argument seems like garbage,
|
is a filename that matches. If the argument seems like garbage,
|
||||||
check for a file that might have screwed up the '?'.
|
check for a file that might have screwed up the '?'.
|
||||||
|
@ -218,8 +218,8 @@ ENTER(0x220);
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
case_ShdPnd:
|
case_ShdPnd:
|
||||||
memcpy(P->signal, S, 16);
|
memcpy(ShdPnd, S, 16);
|
||||||
P->signal[16] = '\0';
|
// we know it to be 16 char, so no '\0' needed
|
||||||
continue;
|
continue;
|
||||||
case_SigBlk:
|
case_SigBlk:
|
||||||
memcpy(P->blocked, S, 16);
|
memcpy(P->blocked, S, 16);
|
||||||
@ -622,6 +622,8 @@ static proc_t* simple_readtask(PROCTAB *restrict const PT, const proc_t *restric
|
|||||||
t->environ = p->environ;
|
t->environ = p->environ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
t->ppid = p->ppid; // ought to put the per-task ppid somewhere
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
next_task:
|
next_task:
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -84,11 +84,12 @@
|
|||||||
// Then the other flags
|
// Then the other flags
|
||||||
#define CF_CUMUL 0x00000010 // mark cumulative (Summed) headers with 'C' */
|
#define CF_CUMUL 0x00000010 // mark cumulative (Summed) headers with 'C' */
|
||||||
#define CF_PIDMAX 0x00000020 // react to pid_max
|
#define CF_PIDMAX 0x00000020 // react to pid_max
|
||||||
|
// Only one allowed; use separate bits to catch errors.
|
||||||
#define CF_PRINT_THREAD_ONLY 0x10000000
|
#define CF_PRINT_THREAD_ONLY 0x10000000
|
||||||
#define CF_PRINT_PROCESS_ONLY 0x20000000
|
#define CF_PRINT_PROCESS_ONLY 0x20000000
|
||||||
#define CF_PRINT_EVERY_TIME 0x40000000
|
#define CF_PRINT_EVERY_TIME 0x40000000
|
||||||
#define CF_PRINT_AS_NEEDED 0x80000000 // means we have no clue, so assume EVERY TIME
|
#define CF_PRINT_AS_NEEDED 0x80000000 // means we have no clue, so assume EVERY TIME
|
||||||
|
#define CF_PRINT_MASK 0xf0000000
|
||||||
|
|
||||||
#define needs_for_select (PROC_FILLSTAT | PROC_FILLSTATUS)
|
#define needs_for_select (PROC_FILLSTAT | PROC_FILLSTATUS)
|
||||||
|
|
||||||
@ -252,6 +253,7 @@ extern const shortsort_struct *search_shortsort_array(const int findme);
|
|||||||
extern const format_struct *search_format_array(const char *findme);
|
extern const format_struct *search_format_array(const char *findme);
|
||||||
extern const macro_struct *search_macro_array(const char *findme);
|
extern const macro_struct *search_macro_array(const char *findme);
|
||||||
extern void init_output(void);
|
extern void init_output(void);
|
||||||
|
extern int pr_nop(char *restrict const outbuf, const proc_t *restrict const pp);
|
||||||
|
|
||||||
/* global.c */
|
/* global.c */
|
||||||
extern void reset_global(void);
|
extern void reset_global(void);
|
||||||
|
140
ps/display.c
140
ps/display.c
@ -187,28 +187,115 @@ static void check_headers(void){
|
|||||||
if(!head_normal) lines_to_next_header = -1; /* how UNIX does --noheader */
|
if(!head_normal) lines_to_next_header = -1; /* how UNIX does --noheader */
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned needs_for_format;
|
/***** check sort needs */
|
||||||
static unsigned needs_for_sort;
|
/* see what files need to be read, etc. */
|
||||||
|
static unsigned check_sort_needs(sort_node *walk){
|
||||||
|
unsigned needs = 0;
|
||||||
|
while(walk){
|
||||||
|
needs |= walk->need;
|
||||||
|
walk = walk->next;
|
||||||
|
}
|
||||||
|
return needs;
|
||||||
|
}
|
||||||
|
|
||||||
/***** check needs */
|
/***** check needs */
|
||||||
/* see what files need to be read, etc. */
|
/* see what files need to be read, etc. */
|
||||||
static void check_needs(void){
|
static unsigned collect_format_needs(format_node *walk){
|
||||||
format_node *walk_pr = format_list;
|
unsigned needs = 0;
|
||||||
sort_node *walk_sr = sort_list;
|
while(walk){
|
||||||
/* selection doesn't currently have expensive needs */
|
needs |= walk->need;
|
||||||
|
walk = walk->next;
|
||||||
while(walk_pr){
|
|
||||||
needs_for_format |= walk_pr->need;
|
|
||||||
walk_pr = walk_pr->next;
|
|
||||||
}
|
}
|
||||||
if(bsd_e_option) needs_for_format |= PROC_FILLENV;
|
return needs;
|
||||||
|
|
||||||
while(walk_sr){
|
|
||||||
needs_for_sort |= walk_sr->need;
|
|
||||||
walk_sr = walk_sr->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static format_node *proc_format_list;
|
||||||
|
static format_node *task_format_list;
|
||||||
|
|
||||||
|
static unsigned needs_for_sort;
|
||||||
|
static unsigned proc_format_needs;
|
||||||
|
static unsigned task_format_needs;
|
||||||
|
|
||||||
|
#define needs_for_format (proc_format_needs|task_format_needs)
|
||||||
|
|
||||||
|
#define PROC_ONLY_FLAGS (PROC_FILLENV|PROC_FILLARG|PROC_FILLCOM|PROC_FILLMEM)
|
||||||
|
|
||||||
|
/***** munge lists and determine openproc() flags */
|
||||||
|
static void lists_and_needs(void){
|
||||||
|
check_headers();
|
||||||
|
|
||||||
|
// only care about the difference when showing both
|
||||||
|
if( (thread_flags & (TF_show_proc|TF_show_task)) == (TF_show_proc|TF_show_task) ){
|
||||||
|
format_node pfn, tfn; // junk, to handle special case at begin of list
|
||||||
|
format_node *walk = format_list;
|
||||||
|
format_node *p_end = &pfn;
|
||||||
|
format_node *t_end = &tfn;
|
||||||
|
while(walk){
|
||||||
|
format_node *new = malloc(sizeof(format_node));
|
||||||
|
memcpy(new,walk,sizeof(format_node));
|
||||||
|
p_end->next = walk;
|
||||||
|
t_end->next = new;
|
||||||
|
p_end = walk;
|
||||||
|
t_end = new;
|
||||||
|
switch(walk->flags & CF_PRINT_MASK){
|
||||||
|
case CF_PRINT_THREAD_ONLY:
|
||||||
|
p_end->pr = pr_nop;
|
||||||
|
p_end->need = 0;
|
||||||
|
break;
|
||||||
|
case CF_PRINT_PROCESS_ONLY:
|
||||||
|
t_end->pr = pr_nop;
|
||||||
|
t_end->need = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "please report this bug\n");
|
||||||
|
// FALL THROUGH
|
||||||
|
case CF_PRINT_AS_NEEDED:
|
||||||
|
case CF_PRINT_EVERY_TIME:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
walk = walk->next;
|
||||||
|
}
|
||||||
|
t_end->next = NULL;
|
||||||
|
p_end->next = NULL;
|
||||||
|
proc_format_list = pfn.next;
|
||||||
|
task_format_list = tfn.next;
|
||||||
|
}else{
|
||||||
|
proc_format_list = format_list;
|
||||||
|
task_format_list = format_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
proc_format_needs = collect_format_needs(proc_format_list);
|
||||||
|
task_format_needs = collect_format_needs(task_format_list);
|
||||||
|
|
||||||
|
needs_for_sort = check_sort_needs(sort_list);
|
||||||
|
|
||||||
|
// move process-only flags to the process
|
||||||
|
proc_format_needs |= (task_format_needs &~ PROC_ONLY_FLAGS);
|
||||||
|
task_format_needs &= ~PROC_ONLY_FLAGS;
|
||||||
|
|
||||||
|
if(bsd_c_option){
|
||||||
|
proc_format_needs &= ~PROC_FILLARG;
|
||||||
|
needs_for_sort &= ~PROC_FILLARG;
|
||||||
|
}
|
||||||
|
if(!unix_f_option){
|
||||||
|
proc_format_needs &= ~PROC_FILLCOM;
|
||||||
|
needs_for_sort &= ~PROC_FILLCOM;
|
||||||
|
}
|
||||||
|
// convert ARG to COM as a standard
|
||||||
|
if(proc_format_needs & PROC_FILLARG){
|
||||||
|
proc_format_needs |= PROC_FILLCOM;
|
||||||
|
proc_format_needs &= ~PROC_FILLARG;
|
||||||
|
}
|
||||||
|
if(bsd_e_option){
|
||||||
|
if(proc_format_needs&PROC_FILLCOM) proc_format_needs |= PROC_FILLENV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME broken filthy hack -- got to unify some stuff here */
|
||||||
|
if( ( (proc_format_needs|task_format_needs|needs_for_sort) & PROC_FILLWCHAN) && !wchan_is_number)
|
||||||
|
if (open_psdb(namelist_file)) wchan_is_number = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/***** fill in %CPU; not in libproc because of include_dead_children */
|
/***** fill in %CPU; not in libproc because of include_dead_children */
|
||||||
/* Note: for sorting, not display, so 0..0x7fffffff would be OK */
|
/* Note: for sorting, not display, so 0..0x7fffffff would be OK */
|
||||||
@ -226,18 +313,6 @@ static void fill_pcpu(proc_t *buf){
|
|||||||
buf->pcpu = pcpu; // fits in an int, summing children on 128 CPUs
|
buf->pcpu = pcpu; // fits in an int, summing children on 128 CPUs
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** figure out what we need */
|
|
||||||
static void compute_needs(void){
|
|
||||||
if(bsd_c_option){
|
|
||||||
needs_for_format &= ~PROC_FILLARG;
|
|
||||||
needs_for_sort &= ~PROC_FILLARG;
|
|
||||||
}
|
|
||||||
if(!unix_f_option){
|
|
||||||
needs_for_format &= ~PROC_FILLCOM;
|
|
||||||
needs_for_sort &= ~PROC_FILLCOM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** just display */
|
/***** just display */
|
||||||
static void simple_spew(void){
|
static void simple_spew(void){
|
||||||
proc_t buf;
|
proc_t buf;
|
||||||
@ -251,11 +326,11 @@ static void simple_spew(void){
|
|||||||
memset(&buf, '#', sizeof(proc_t));
|
memset(&buf, '#', sizeof(proc_t));
|
||||||
while(readproc(ptp,&buf)){
|
while(readproc(ptp,&buf)){
|
||||||
if(want_this_proc(&buf)){
|
if(want_this_proc(&buf)){
|
||||||
if(thread_flags & TF_show_proc) show_one_proc(&buf,format_list);
|
if(thread_flags & TF_show_proc) show_one_proc(&buf, proc_format_list);
|
||||||
if(thread_flags & TF_show_task){
|
if(thread_flags & TF_show_task){
|
||||||
proc_t buf2;
|
proc_t buf2;
|
||||||
// must still have the process allocated
|
// must still have the process allocated
|
||||||
while(readtask(ptp,&buf,&buf2)) show_one_proc(&buf2,format_list);
|
while(readtask(ptp,&buf,&buf2)) show_one_proc(&buf2, task_format_list);
|
||||||
// must not attempt to free cmdline and environ
|
// must not attempt to free cmdline and environ
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -451,13 +526,8 @@ int main(int argc, char *argv[]){
|
|||||||
trace("======= ps output follows =======\n");
|
trace("======= ps output follows =======\n");
|
||||||
|
|
||||||
init_output(); /* must be between parser and output */
|
init_output(); /* must be between parser and output */
|
||||||
check_headers();
|
|
||||||
|
|
||||||
check_needs();
|
lists_and_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;
|
|
||||||
compute_needs();
|
|
||||||
|
|
||||||
if(forest_type || sort_list) fancy_spew(); /* sort or forest */
|
if(forest_type || sort_list) fancy_spew(); /* sort or forest */
|
||||||
else simple_spew(); /* no sort, no forest */
|
else simple_spew(); /* no sort, no forest */
|
||||||
|
31
ps/output.c
31
ps/output.c
@ -210,7 +210,8 @@ static int sr_swapable(const proc_t* P, const proc_t* Q) {
|
|||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
/************ Lots of format functions, starting with the NOP **************/
|
/************ Lots of format functions, starting with the NOP **************/
|
||||||
|
|
||||||
static int pr_nop(char *restrict const outbuf, const proc_t *restrict const pp){
|
// so popular it can't be "static"
|
||||||
|
int pr_nop(char *restrict const outbuf, const proc_t *restrict const pp){
|
||||||
(void)pp;
|
(void)pp;
|
||||||
return snprintf(outbuf, COLWID, "%c", '-');
|
return snprintf(outbuf, COLWID, "%c", '-');
|
||||||
}
|
}
|
||||||
@ -1175,14 +1176,14 @@ static const format_struct format_array[] = {
|
|||||||
{"cursig", "CURSIG", pr_nop, sr_nop, 6, 0, DEC, AN|RIGHT},
|
{"cursig", "CURSIG", pr_nop, sr_nop, 6, 0, DEC, AN|RIGHT},
|
||||||
{"cutime", "-", pr_nop, sr_cutime, 1, 0, LNX, AN|RIGHT},
|
{"cutime", "-", pr_nop, sr_cutime, 1, 0, LNX, AN|RIGHT},
|
||||||
{"cwd", "CWD", pr_nop, sr_nop, 3, 0, LNX, AN|LEFT},
|
{"cwd", "CWD", pr_nop, sr_nop, 3, 0, LNX, AN|LEFT},
|
||||||
{"drs", "DRS", pr_drs, sr_drs, 4, MEM, LNX, ET|RIGHT},
|
{"drs", "DRS", pr_drs, sr_drs, 4, MEM, LNX, PO|RIGHT},
|
||||||
{"dsiz", "DSIZ", pr_dsiz, sr_nop, 4, 0, LNX, ET|RIGHT},
|
{"dsiz", "DSIZ", pr_dsiz, sr_nop, 4, 0, LNX, PO|RIGHT},
|
||||||
{"egid", "EGID", pr_egid, sr_egid, 5, 0, LNX, ET|RIGHT},
|
{"egid", "EGID", pr_egid, sr_egid, 5, 0, LNX, ET|RIGHT},
|
||||||
{"egroup", "EGROUP", pr_egroup, sr_egroup, 8, GRP, LNX, ET|USER},
|
{"egroup", "EGROUP", pr_egroup, sr_egroup, 8, GRP, LNX, ET|USER},
|
||||||
{"eip", "EIP", pr_eip, sr_kstk_eip, 8, 0, LNX, TO|RIGHT},
|
{"eip", "EIP", pr_eip, sr_kstk_eip, 8, 0, LNX, TO|RIGHT},
|
||||||
{"end_code", "E_CODE", pr_nop, sr_end_code, 8, 0, LNx, PO|RIGHT},
|
{"end_code", "E_CODE", pr_nop, sr_end_code, 8, 0, LNx, PO|RIGHT},
|
||||||
{"environ","ENVIRONMENT",pr_nop, sr_nop, 11, ENV, LNx, PO|UNLIMITED},
|
{"environ","ENVIRONMENT",pr_nop, sr_nop, 11, ENV, LNx, PO|UNLIMITED},
|
||||||
{"esp", "ESP", pr_esp, sr_kstk_esp, 8, 0, LNX, PO|RIGHT},
|
{"esp", "ESP", pr_esp, sr_kstk_esp, 8, 0, LNX, TO|RIGHT},
|
||||||
{"etime", "ELAPSED", pr_etime, sr_nop, 11, 0, U98, AN|RIGHT}, /* was 7 wide */
|
{"etime", "ELAPSED", pr_etime, sr_nop, 11, 0, U98, AN|RIGHT}, /* was 7 wide */
|
||||||
{"euid", "EUID", pr_euid, sr_euid, 5, 0, LNX, ET|RIGHT},
|
{"euid", "EUID", pr_euid, sr_euid, 5, 0, LNX, ET|RIGHT},
|
||||||
{"euser", "EUSER", pr_euser, sr_euser, 8, USR, LNX, ET|USER},
|
{"euser", "EUSER", pr_euser, sr_euser, 8, USR, LNX, ET|USER},
|
||||||
@ -1211,7 +1212,7 @@ static const format_struct format_array[] = {
|
|||||||
{"lim", "LIM", pr_lim, sr_rss_rlim, 5, 0, BSD, AN|RIGHT},
|
{"lim", "LIM", pr_lim, sr_rss_rlim, 5, 0, BSD, AN|RIGHT},
|
||||||
{"login", "LOGNAME", pr_nop, sr_nop, 8, 0, BSD, AN|LEFT}, /*logname*/ /* double check */
|
{"login", "LOGNAME", pr_nop, sr_nop, 8, 0, BSD, AN|LEFT}, /*logname*/ /* double check */
|
||||||
{"logname", "LOGNAME", pr_nop, sr_nop, 8, 0, XXX, AN|LEFT}, /*login*/
|
{"logname", "LOGNAME", pr_nop, sr_nop, 8, 0, XXX, AN|LEFT}, /*login*/
|
||||||
{"longtname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, AN|LEFT},
|
{"longtname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, PO|LEFT},
|
||||||
{"lstart", "STARTED", pr_lstart, sr_nop, 24, 0, XXX, AN|RIGHT},
|
{"lstart", "STARTED", pr_lstart, sr_nop, 24, 0, XXX, AN|RIGHT},
|
||||||
{"luid", "LUID", pr_nop, sr_nop, 5, 0, LNX, ET|RIGHT}, /* login ID */
|
{"luid", "LUID", pr_nop, sr_nop, 5, 0, LNX, ET|RIGHT}, /* login ID */
|
||||||
{"luser", "LUSER", pr_nop, sr_nop, 8, USR, LNX, ET|USER}, /* login USER */
|
{"luser", "LUSER", pr_nop, sr_nop, 8, USR, LNX, ET|USER}, /* login USER */
|
||||||
@ -1230,7 +1231,7 @@ static const format_struct format_array[] = {
|
|||||||
{"minflt", "MINFLT", pr_minflt, sr_min_flt, 6, 0, XXX, AN|RIGHT},
|
{"minflt", "MINFLT", pr_minflt, sr_min_flt, 6, 0, XXX, AN|RIGHT},
|
||||||
{"msgrcv", "MSGRCV", pr_nop, sr_nop, 6, 0, XXX, AN|RIGHT},
|
{"msgrcv", "MSGRCV", pr_nop, sr_nop, 6, 0, XXX, AN|RIGHT},
|
||||||
{"msgsnd", "MSGSND", pr_nop, sr_nop, 6, 0, XXX, AN|RIGHT},
|
{"msgsnd", "MSGSND", pr_nop, sr_nop, 6, 0, XXX, AN|RIGHT},
|
||||||
{"mwchan", "MWCHAN", pr_nop, sr_nop, 6, WCH, BSD, AN|WCHAN}, /* mutex (FreeBSD) */
|
{"mwchan", "MWCHAN", pr_nop, sr_nop, 6, WCH, BSD, TO|WCHAN}, /* mutex (FreeBSD) */
|
||||||
{"ni", "NI", pr_nice, sr_nice, 3, 0, BSD, TO|RIGHT}, /*nice*/
|
{"ni", "NI", pr_nice, sr_nice, 3, 0, BSD, TO|RIGHT}, /*nice*/
|
||||||
{"nice", "NI", pr_nice, sr_nice, 3, 0, U98, TO|RIGHT}, /*ni*/
|
{"nice", "NI", pr_nice, sr_nice, 3, 0, U98, TO|RIGHT}, /*ni*/
|
||||||
{"nivcsw", "IVCSW", pr_nop, sr_nop, 5, 0, XXX, AN|RIGHT},
|
{"nivcsw", "IVCSW", pr_nop, sr_nop, 5, 0, XXX, AN|RIGHT},
|
||||||
@ -1247,7 +1248,7 @@ static const format_struct format_array[] = {
|
|||||||
{"p_ru", "P_RU", pr_nop, sr_nop, 6, 0, BSD, AN|RIGHT},
|
{"p_ru", "P_RU", pr_nop, sr_nop, 6, 0, BSD, AN|RIGHT},
|
||||||
{"paddr", "PADDR", pr_nop, sr_nop, 6, 0, BSD, AN|RIGHT},
|
{"paddr", "PADDR", pr_nop, sr_nop, 6, 0, BSD, AN|RIGHT},
|
||||||
{"pagein", "PAGEIN", pr_majflt, sr_nop, 6, 0, XXX, AN|RIGHT},
|
{"pagein", "PAGEIN", pr_majflt, sr_nop, 6, 0, XXX, AN|RIGHT},
|
||||||
{"pcpu", "%CPU", pr_pcpu, sr_pcpu, 4, 0, U98, TO|RIGHT}, /*%cpu*/
|
{"pcpu", "%CPU", pr_pcpu, sr_pcpu, 4, 0, U98, ET|RIGHT}, /*%cpu*/
|
||||||
{"pending", "PENDING", pr_sig, sr_nop, 9, 0, BSD, ET|SIGNAL}, /*sig*/
|
{"pending", "PENDING", pr_sig, sr_nop, 9, 0, BSD, ET|SIGNAL}, /*sig*/
|
||||||
{"pgid", "PGID", pr_pgid, sr_pgrp, 5, 0, U98, PO|PIDMAX|RIGHT},
|
{"pgid", "PGID", pr_pgid, sr_pgrp, 5, 0, U98, PO|PIDMAX|RIGHT},
|
||||||
{"pgrp", "PGRP", pr_pgid, sr_pgrp, 5, 0, LNX, PO|PIDMAX|RIGHT},
|
{"pgrp", "PGRP", pr_pgid, sr_pgrp, 5, 0, LNX, PO|PIDMAX|RIGHT},
|
||||||
@ -1255,7 +1256,7 @@ static const format_struct format_array[] = {
|
|||||||
{"pmem", "%MEM", pr_pmem, sr_nop, 4, 0, XXX, PO|RIGHT}, /*%mem*/
|
{"pmem", "%MEM", pr_pmem, sr_nop, 4, 0, XXX, PO|RIGHT}, /*%mem*/
|
||||||
{"poip", "-", pr_nop, sr_nop, 1, 0, BSD, AN|RIGHT},
|
{"poip", "-", pr_nop, sr_nop, 1, 0, BSD, AN|RIGHT},
|
||||||
{"policy", "POL", pr_class, sr_sched, 3, 0, DEC, TO|LEFT},
|
{"policy", "POL", pr_class, sr_sched, 3, 0, DEC, TO|LEFT},
|
||||||
{"ppid", "PPID", pr_ppid, sr_ppid, 5, 0, U98, AN|PIDMAX|RIGHT},
|
{"ppid", "PPID", pr_ppid, sr_ppid, 5, 0, U98, PO|PIDMAX|RIGHT},
|
||||||
{"pri", "PRI", pr_pri, sr_nop, 3, 0, XXX, TO|RIGHT},
|
{"pri", "PRI", pr_pri, sr_nop, 3, 0, XXX, TO|RIGHT},
|
||||||
{"priority", "PRI", pr_priority, sr_priority, 3, 0, LNX, TO|RIGHT}, /*ni,nice*/ /* from Linux sorting names */
|
{"priority", "PRI", pr_priority, sr_priority, 3, 0, LNX, TO|RIGHT}, /*ni,nice*/ /* from Linux sorting names */
|
||||||
{"prmgrp", "-", pr_nop, sr_nop, 1, 0, HPU, PO|RIGHT},
|
{"prmgrp", "-", pr_nop, sr_nop, 1, 0, HPU, PO|RIGHT},
|
||||||
@ -1274,7 +1275,7 @@ static const format_struct format_array[] = {
|
|||||||
{"rtprio", "RTPRIO", pr_rtprio, sr_rtprio, 6, 0, BSD, TO|RIGHT},
|
{"rtprio", "RTPRIO", pr_rtprio, sr_rtprio, 6, 0, BSD, TO|RIGHT},
|
||||||
{"ruid", "RUID", pr_ruid, sr_ruid, 5, 0, XXX, ET|RIGHT},
|
{"ruid", "RUID", pr_ruid, sr_ruid, 5, 0, XXX, ET|RIGHT},
|
||||||
{"ruser", "RUSER", pr_ruser, sr_ruser, 8, USR, U98, ET|USER},
|
{"ruser", "RUSER", pr_ruser, sr_ruser, 8, USR, U98, ET|USER},
|
||||||
{"s", "S", pr_s, sr_state, 1, 0, SUN, ET|LEFT}, /*stat,state*/
|
{"s", "S", pr_s, sr_state, 1, 0, SUN, TO|LEFT}, /*stat,state*/
|
||||||
{"sched", "SCH", pr_sched, sr_sched, 3, 0, AIX, TO|RIGHT},
|
{"sched", "SCH", pr_sched, sr_sched, 3, 0, AIX, TO|RIGHT},
|
||||||
{"scnt", "SCNT", pr_nop, sr_nop, 4, 0, DEC, AN|RIGHT}, /* man page misspelling of scount? */
|
{"scnt", "SCNT", pr_nop, sr_nop, 4, 0, DEC, AN|RIGHT}, /* man page misspelling of scount? */
|
||||||
{"scount", "SC", pr_nop, sr_nop, 4, 0, AIX, AN|RIGHT}, /* scnt==scount, DEC claims both */
|
{"scount", "SC", pr_nop, sr_nop, 4, 0, AIX, AN|RIGHT}, /* scnt==scount, DEC claims both */
|
||||||
@ -1321,17 +1322,17 @@ static const format_struct format_array[] = {
|
|||||||
{"time", "TIME", pr_time, sr_nop, 8, 0, U98, ET|CUMUL|RIGHT}, /*cputime*/ /* was 6 wide */
|
{"time", "TIME", pr_time, sr_nop, 8, 0, U98, ET|CUMUL|RIGHT}, /*cputime*/ /* was 6 wide */
|
||||||
{"timeout", "TMOUT", pr_timeout, sr_timeout, 5, 0, LNX, AN|RIGHT},
|
{"timeout", "TMOUT", pr_timeout, sr_timeout, 5, 0, LNX, AN|RIGHT},
|
||||||
{"tmout", "TMOUT", pr_timeout, sr_timeout, 5, 0, LNX, AN|RIGHT},
|
{"tmout", "TMOUT", pr_timeout, sr_timeout, 5, 0, LNX, AN|RIGHT},
|
||||||
{"tname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, AN|LEFT},
|
{"tname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, PO|LEFT},
|
||||||
{"tpgid", "TPGID", pr_tpgid, sr_tpgid, 5, 0, XXX, AN|PIDMAX|RIGHT},
|
{"tpgid", "TPGID", pr_tpgid, sr_tpgid, 5, 0, XXX, AN|PIDMAX|RIGHT},
|
||||||
{"trs", "TRS", pr_trs, sr_trs, 4, MEM, AIX, PO|RIGHT},
|
{"trs", "TRS", pr_trs, sr_trs, 4, MEM, AIX, PO|RIGHT},
|
||||||
{"trss", "TRSS", pr_trs, sr_trs, 4, MEM, BSD, PO|RIGHT}, /* 4.3BSD NET/2 */
|
{"trss", "TRSS", pr_trs, sr_trs, 4, MEM, BSD, PO|RIGHT}, /* 4.3BSD NET/2 */
|
||||||
{"tsess", "TSESS", pr_nop, sr_nop, 5, 0, BSD, AN|PIDMAX|RIGHT},
|
{"tsess", "TSESS", pr_nop, sr_nop, 5, 0, BSD, AN|PIDMAX|RIGHT},
|
||||||
{"tsession", "TSESS", pr_nop, sr_nop, 5, 0, DEC, AN|PIDMAX|RIGHT},
|
{"tsession", "TSESS", pr_nop, sr_nop, 5, 0, DEC, AN|PIDMAX|RIGHT},
|
||||||
{"tsiz", "TSIZ", pr_tsiz, sr_nop, 4, 0, BSD, AN|RIGHT},
|
{"tsiz", "TSIZ", pr_tsiz, sr_nop, 4, 0, BSD, PO|RIGHT},
|
||||||
{"tt", "TT", pr_tty8, sr_tty, 8, 0, BSD, AN|LEFT},
|
{"tt", "TT", pr_tty8, sr_tty, 8, 0, BSD, PO|LEFT},
|
||||||
{"tty", "TT", pr_tty8, sr_tty, 8, 0, U98, AN|LEFT}, /* Unix98 requires "TT" but has "TTY" too. :-( */ /* was 3 wide */
|
{"tty", "TT", pr_tty8, sr_tty, 8, 0, U98, PO|LEFT}, /* Unix98 requires "TT" but has "TTY" too. :-( */ /* was 3 wide */
|
||||||
{"tty4", "TTY", pr_tty4, sr_tty, 4, 0, LNX, AN|LEFT},
|
{"tty4", "TTY", pr_tty4, sr_tty, 4, 0, LNX, PO|LEFT},
|
||||||
{"tty8", "TTY", pr_tty8, sr_tty, 8, 0, LNX, AN|LEFT},
|
{"tty8", "TTY", pr_tty8, sr_tty, 8, 0, LNX, PO|LEFT},
|
||||||
{"u_procp", "UPROCP", pr_nop, sr_nop, 6, 0, DEC, AN|RIGHT},
|
{"u_procp", "UPROCP", pr_nop, sr_nop, 6, 0, DEC, AN|RIGHT},
|
||||||
{"ucmd", "CMD", pr_comm, sr_cmd, 16, COM, DEC, PO|UNLIMITED}, /*ucomm*/
|
{"ucmd", "CMD", pr_comm, sr_cmd, 16, COM, DEC, PO|UNLIMITED}, /*ucomm*/
|
||||||
{"ucomm", "COMMAND", pr_comm, sr_nop, 16, COM, XXX, PO|UNLIMITED}, /*comm*/
|
{"ucomm", "COMMAND", pr_comm, sr_nop, 16, COM, XXX, PO|UNLIMITED}, /*comm*/
|
||||||
|
@ -188,7 +188,7 @@ double_percent:
|
|||||||
fnode->pr = NULL; /* checked for */
|
fnode->pr = NULL; /* checked for */
|
||||||
fnode->need = 0;
|
fnode->need = 0;
|
||||||
fnode->vendor = AIX;
|
fnode->vendor = AIX;
|
||||||
fnode->flags = 0;
|
fnode->flags = CF_PRINT_EVERY_TIME;
|
||||||
fnode->next = NULL;
|
fnode->next = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -695,7 +695,7 @@ static const char *generate_sysv_list(void){
|
|||||||
fn->pr = NULL; /* checked for */
|
fn->pr = NULL; /* checked for */
|
||||||
fn->need = 0;
|
fn->need = 0;
|
||||||
fn->vendor = AIX; /* yes, for SGI weirdness */
|
fn->vendor = AIX; /* yes, for SGI weirdness */
|
||||||
fn->flags = 0;
|
fn->flags = CF_PRINT_EVERY_TIME;
|
||||||
fn->next = format_list;
|
fn->next = format_list;
|
||||||
format_list=fn;
|
format_list=fn;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user