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>
This commit is contained in:
parent
1c013fae28
commit
4add757929
@ -156,22 +156,28 @@ int pgrep_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (proc->pid == pid)
|
if (proc->pid == pid)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (ppid2match >= 0 && ppid2match != proc->ppid)
|
||||||
|
continue;
|
||||||
|
if (sid2match >= 0 && sid2match != proc->sid)
|
||||||
|
continue;
|
||||||
|
|
||||||
cmd = proc->argv0;
|
cmd = proc->argv0;
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
cmd = proc->comm;
|
cmd = proc->comm;
|
||||||
} else {
|
} else {
|
||||||
int i = proc->argv_len;
|
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) {
|
while (--i >= 0) {
|
||||||
if ((unsigned char)cmd[i] < ' ')
|
if ((unsigned char)cmd[i] < ' ')
|
||||||
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 */
|
/* NB: OPT_INVERT is always 0 or 1 */
|
||||||
if (!argv[0]
|
if (!argv[0]
|
||||||
|| (regexec(&re_buffer, cmd, 1, re_match, 0) == 0 /* match found */
|
|| (regexec(&re_buffer, cmd, 1, re_match, 0) == 0 /* match found */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user