diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2025-10-23 12:39:47 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2025-11-08 07:42:34 +0100 |
| commit | 4ee218a2d262943e362e3e25414852cf8e982dcb (patch) | |
| tree | bfc6e7b895f70595f7d40457018a9759334447d7 /procps/pgrep.c | |
| parent | d549c8be8636dd523358565e573eeba4fc1f928d (diff) | |
pgrep/pkill: fix -x to also match comm field
When running `pgrep -x example` against a process `/bin/example --arg`,
BusyBox fails to match, while GNU pgrep succeeds. The reason is that the
comparison is done only against the full argv[0] rather than comm. This
patch changes pgrep -x to also try /proc/[pid]/comm for exact matching.
function old new delta
pgrep_main 681 670 -11
Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'procps/pgrep.c')
| -rw-r--r-- | procps/pgrep.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/procps/pgrep.c b/procps/pgrep.c index 04ae92a67..299e2dac7 100644 --- a/procps/pgrep.c +++ b/procps/pgrep.c @@ -215,16 +215,16 @@ int pgrep_main(int argc UNUSED_PARAM, char **argv) if (!match) { again: match = (regexec(&re_buffer, cmd, 1, re_match, 0) == 0); + if (match && OPT_ANCHOR) { + /* -x requires full string match */ + match = (re_match[0].rm_so == 0 && cmd[re_match[0].rm_eo] == '\0'); + } if (!match && cmd != proc->comm) { /* if argv[] did not match, try comm */ cmdlen = -1; cmd = proc->comm; goto again; } - if (match && OPT_ANCHOR) { - /* -x requires full string match */ - match = (re_match[0].rm_so == 0 && cmd[re_match[0].rm_eo] == '\0'); - } } /* NB: OPT_INVERT is always 0 or 1 */ |
