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 */