From 98ebab8b768d4651d8db2f46a0cd6bd53012c8e6 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 30 Jun 2007 14:47:41 +0000 Subject: top,ps: improve /proc/PID/cmdinfo reading code function old new delta display_status - 1231 +1231 read_cmdline - 101 +101 parse_conf 1284 1303 +19 arith 2033 2042 +9 collect_blk 467 474 +7 fsck_main 1909 1911 +2 dhcprelay_main 1125 1122 -3 singlemount 4555 4547 -8 read_close 50 36 -14 get_lcm 123 105 -18 ed_main 3111 3084 -27 func_args 73 28 -45 procps_scan 732 658 -74 top_main 2187 899 -1288 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 4/8 up/down: 1369/-1477) Total: -108 bytes text data bss dec hex filename 676048 2744 13968 692760 a9218 busybox_old 675940 2744 13968 692652 a91ac busybox_unstripped --- include/libbb.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'include') diff --git a/include/libbb.h b/include/libbb.h index 6a699a7e6..a95de848b 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -836,7 +836,7 @@ enum { COMM_LEN = 16 }; typedef struct { DIR *dir; /* Fields are set to 0/NULL if failed to determine (or not requested) */ - char *cmd; + /*char *cmd;*/ char *argv0; /*char *exe;*/ USE_SELINUX(char *context;) @@ -852,7 +852,9 @@ typedef struct { unsigned gid; unsigned tty_major,tty_minor; char state[4]; - /* basename of executable in exec(2), read from /proc/N/stat */ + /* basename of executable in exec(2), read from /proc/N/stat + * (if executable is symlink or script, it is NOT replaced + * by link target or interpreter name) */ char comm[COMM_LEN]; /* user/group? - use passwd/group parsing functions */ } procps_status_t; @@ -863,9 +865,9 @@ enum { PSSCAN_SID = 1 << 3, PSSCAN_UIDGID = 1 << 4, PSSCAN_COMM = 1 << 5, - PSSCAN_CMD = 1 << 6, + /* PSSCAN_CMD = 1 << 6, - use read_cmdline instead */ PSSCAN_ARGV0 = 1 << 7, - PSSCAN_EXE = 1 << 8, /* not implemented yet */ + /* PSSCAN_EXE = 1 << 8, - not implemented */ PSSCAN_STATE = 1 << 9, PSSCAN_VSZ = 1 << 10, PSSCAN_RSS = 1 << 11, @@ -883,6 +885,9 @@ enum { procps_status_t* alloc_procps_scan(int flags); void free_procps_scan(procps_status_t* sp); procps_status_t* procps_scan(procps_status_t* sp, int flags); +/* Format cmdline (up to col chars) into char buf[col+1] */ +/* Puts [comm] if cmdline is empty (-> process is a kernel thread) */ +void read_cmdline(char *buf, int col, unsigned pid, const char *comm); pid_t *find_pid_by_name(const char* procName); pid_t *pidlist_reverse(pid_t *pidList); -- cgit v1.2.3