killall, pidof: use argv0 for process matching too

top: show cmdline, not comm field
(fixes problems with re-execed applets showing as processes with name "exe",
and not being found by pidof/killall by applet name)

function                                             old     new   delta
find_pid_by_name                                      98     156     +58
procps_scan                                          692     732     +40
top_main                                            2724    2762     +38
find_pair                                            164     180     +16
collect_int                                          114     123      +9
cmp_main                                             547     555      +8
collect_fork                                         112     119      +7
collect_ctx                                          112     119      +7
read_package_field                                   253     257      +4
passwd_main                                         1983    1985      +2
process_stdin                                        435     433      -2
xstrtoul_range_sfx                                   229     226      -3
get_next_block                                      1852    1849      -3
arith                                               2042    2033      -9
sv_main                                             1236    1226     -10
singlemount                                         4690    4672     -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 10/6 up/down: 189/-45)          Total: 144 bytes
   text    data     bss     dec     hex filename
 734789    3028   14400  752217   b7a59 busybox_old
 734933    3028   14400  752361   b7ae9 busybox_unstripped
This commit is contained in:
Denis Vlasenko
2007-06-30 08:03:26 +00:00
parent 42ee26d00c
commit f7d07b1723
4 changed files with 60 additions and 27 deletions

View File

@ -836,6 +836,8 @@ typedef struct {
DIR *dir;
/* Fields are set to 0/NULL if failed to determine (or not requested) */
char *cmd;
char *argv0;
/*char *exe;*/
USE_SELINUX(char *context;)
/* Everything below must contain no ptrs to malloc'ed data:
* it is memset(0) for each process in procps_scan() */
@ -861,13 +863,15 @@ enum {
PSSCAN_UIDGID = 1 << 4,
PSSCAN_COMM = 1 << 5,
PSSCAN_CMD = 1 << 6,
PSSCAN_STATE = 1 << 7,
PSSCAN_VSZ = 1 << 8,
PSSCAN_RSS = 1 << 9,
PSSCAN_STIME = 1 << 10,
PSSCAN_UTIME = 1 << 11,
PSSCAN_TTY = 1 << 12,
USE_SELINUX(PSSCAN_CONTEXT = 1 << 13,)
PSSCAN_ARGV0 = 1 << 7,
PSSCAN_EXE = 1 << 8, /* not implemented yet */
PSSCAN_STATE = 1 << 9,
PSSCAN_VSZ = 1 << 10,
PSSCAN_RSS = 1 << 11,
PSSCAN_STIME = 1 << 12,
PSSCAN_UTIME = 1 << 13,
PSSCAN_TTY = 1 << 14,
USE_SELINUX(PSSCAN_CONTEXT = 1 << 15,)
/* These are all retrieved from proc/NN/stat in one go: */
PSSCAN_STAT = PSSCAN_PPID | PSSCAN_PGID | PSSCAN_SID
| PSSCAN_COMM | PSSCAN_STATE