diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-06-26 14:41:53 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-06-26 14:41:53 +0200 |
commit | 4add757929a33203e6b5f829eb518654a73ad4e4 (patch) | |
tree | fcb331398ef5975074657358e675dfdc2ddadff3 | |
parent | 1c013fae2845a6062fb4ad9e7720b5e5d1117cac (diff) | |
download | busybox-4add757929a33203e6b5f829eb518654a73ad4e4.tar.gz |
pgrep: fix pgrep -flx "sleep 11" - saw "sleep 11" processes as "sleep 11 "
function old new delta
pgrep_main 584 597 +13
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | procps/pgrep.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/procps/pgrep.c b/procps/pgrep.c index e932a32bc..461abfa34 100644 --- a/procps/pgrep.c +++ b/procps/pgrep.c @@ -156,22 +156,28 @@ int pgrep_main(int argc UNUSED_PARAM, char **argv) if (proc->pid == pid) continue; + if (ppid2match >= 0 && ppid2match != proc->ppid) + continue; + if (sid2match >= 0 && sid2match != proc->sid) + continue; + cmd = proc->argv0; if (!cmd) { cmd = proc->comm; } else { int i = proc->argv_len; + /* + * "sleep 11" looks like "sleep""\0""11""\0" in argv0. + * Make sure last "\0" does not get converted to " ": + */ + if (i && cmd[i-1] == '\0') + i--; while (--i >= 0) { if ((unsigned char)cmd[i] < ' ') cmd[i] = ' '; } } - if (ppid2match >= 0 && ppid2match != proc->ppid) - continue; - if (sid2match >= 0 && sid2match != proc->sid) - continue; - /* NB: OPT_INVERT is always 0 or 1 */ if (!argv[0] || (regexec(&re_buffer, cmd, 1, re_match, 0) == 0 /* match found */ |