diff options
author | Elliott Hughes <enh@google.com> | 2015-11-07 09:44:10 -0800 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2015-11-09 17:37:36 -0600 |
commit | 976eaf88226776260c41b44cce98125ca0b638d6 (patch) | |
tree | 500fc4d90d57fd9e7138be379645cf15839aca9c | |
parent | 2f69ee2f0f25c6fc1dbc440c14c52aeaaf35b6a8 (diff) | |
download | toybox-976eaf88226776260c41b44cce98125ca0b638d6.tar.gz |
Add ps -o CMDLINE.
This is equivalent to Android's historical "NAME" column, showing the
first element of /proc/pid/cmdline.
-rw-r--r-- | toys/posix/ps.c | 82 |
1 files changed, 42 insertions, 40 deletions
diff --git a/toys/posix/ps.c b/toys/posix/ps.c index 6af02a08..0f73d820 100644 --- a/toys/posix/ps.c +++ b/toys/posix/ps.c @@ -69,42 +69,43 @@ config PS Available -o FIELDs: - ADDR Instruction pointer - CMD Command line (including args) - COMM Command name (no args) - ETIME Elapsed time since process start - F Process flags (PF_*) from linux source file include/sched.h - (in octal rather than hex because posix) - GID Group id - GROUP Group name - LABEL Security label - MAJFL Major page faults - MINFL Minor page faults - NI Niceness of process (lower niceness is higher priority) - PCPU Percentage of CPU time used - PGID Process Group ID - PID Process ID - PPID Parent Process ID - PRI Priority - RGID Real (before sgid) group ID - RGROUP Real (before sgid) group name - RSS Resident Set Size (memory currently used) - RUID Real (before suid) user ID - RUSER Real (before suid) user name - S Process state: - R (running) S (sleeping) D (disk sleep) T (stopped) t (traced) - Z (zombie) X (dead) x (dead) K (wakekill) W (waking) - STAT Process state (S) plus: - < high priority N low priority L locked memory - s session leader + foreground l multithreaded - STIME Start time of process in hh:mm (size :19 shows yyyy-mm-dd hh:mm:ss) - SZ Memory Size (4k pages needed to completely swap out process) - TIME CPU time consumed - TTY Controlling terminal - UID User id - USER User name - VSZ Virtual memory size (1k units) - WCHAN Waiting in kernel for + ADDR Instruction pointer + CMD Command line (from /proc/pid/cmdline, including args) + CMDLINE Command line (from /proc/pid/cmdline, no args) + COMM Command name (from /proc/pid/stat, no args) + ETIME Elapsed time since process start + F Process flags (PF_*) from linux source file include/sched.h + (in octal rather than hex because posix) + GID Group id + GROUP Group name + LABEL Security label + MAJFL Major page faults + MINFL Minor page faults + NI Niceness of process (lower niceness is higher priority) + PCPU Percentage of CPU time used + PGID Process Group ID + PID Process ID + PPID Parent Process ID + PRI Priority + RGID Real (before sgid) group ID + RGROUP Real (before sgid) group name + RSS Resident Set Size (memory currently used) + RUID Real (before suid) user ID + RUSER Real (before suid) user name + S Process state: + R (running) S (sleeping) D (disk sleep) T (stopped) t (traced) + Z (zombie) X (dead) x (dead) K (wakekill) W (waking) + STAT Process state (S) plus: + < high priority N low priority L locked memory + s session leader + foreground l multithreaded + STIME Start time of process in hh:mm (size :19 shows yyyy-mm-dd hh:mm:ss) + SZ Memory Size (4k pages needed to completely swap out process) + TIME CPU time consumed + TTY Controlling terminal + UID User id + USER User name + VSZ Virtual memory size (1k units) + WCHAN Waiting in kernel for */ #define FOR_ps @@ -354,7 +355,8 @@ static int do_ps(struct dirtree *new) // Command line limited to 2k displayable. We could dynamically malloc, but // it'd almost never get used, querying length of a proc file is awkward, // fixed buffer is nommu friendly... Wait for somebody to complain. :) - } else if (i==14) { + // CMDLINE - command line from /proc/pid/cmdline without arguments + } else if (i==14 || i==32) { int fd; len = 0; @@ -365,7 +367,7 @@ static int do_ps(struct dirtree *new) if (0<(len = read(fd, out, 2047))) { if (!out[len-1]) len--; else out[len] = 0; - for (i = 0; i<len; i++) if (out[i] < ' ') out[i] = ' '; + if (i==14) for (i = 0; i<len; i++) if (out[i] < ' ') out[i] = ' '; } close(fd); } @@ -425,13 +427,13 @@ static char *parse_o(char *type, int length) "F", "S", "UID", "PID", "PPID", "C", "PRI", "NI", "ADDR", "SZ", "WCHAN", "STIME", "TTY", "TIME", "CMD", "COMMAND", "ELAPSED", "GROUP", "%CPU", "PGID", "RGROUP", "RUSER", "USER", "VSZ", "RSS", "MAJFL", - "GID", "STAT", "RUID", "RGID", "MINFL", "LABEL" + "GID", "STAT", "RUID", "RGID", "MINFL", "LABEL", "CMDLINE" }; // TODO: Android uses -30 for LABEL, but ideally it would auto-size. signed char widths[] = {1,-1,5,5,5,2,3,3,4+sizeof(long),5, -6,5,-8,8,-27,-27,11,-8, 4,5,-8,-8,-8,6,5,6, - 8,-5,4,4,6,-30}; + 8,-5,4,4,6,-30,-27}; int i, j, k; // Get title, length of title, type, end of type, and display width |