From: Craig Small Date: Sun, 17 Apr 2016 06:43:26 +0000 (+1000) Subject: pidof: check cmd if space in argv0 X-Git-Tag: v3.3.12~46 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3f5b75035ec4151a5ffe911b0857d0419ffb5a15;p=procps-ng pidof: check cmd if space in argv0 A difference in behaviour between the sysvinit and procps pidof was that the procps one would sometimes not find process that the sysvinit one did. The difference is that if a space is found in argv[0] then sysvinit would look at cmd for a match. This isn't perfect and more of a best guess but does often work. procps pidof now follows the same "standard". The most obvious difference is with kde based processes and incoming ssh connections with sshd. References: GitLab issue #4 https://gitlab.com/procps-ng/procps/issues/4 https://github.com/limingth/sysvinit/blob/master/sysvinit-2.88dsf/src/killall5.c#L800 --- diff --git a/NEWS b/NEWS index c044e61c..d04b42e1 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ procps-ng-NEXT * ps: display control group name with -o cgname * ps: Fallback to attr/current for context Debian #786956 * tests: Conditionally add prctl Debian #816237 + * pidof: check cmd if space in argv0. GitLab #4 procps-ng-3.3.11 ---------------- diff --git a/pidof.c b/pidof.c index 8712d113..01f0c0a1 100644 --- a/pidof.c +++ b/pidof.c @@ -210,6 +210,12 @@ static void select_procs (void) match = 1; } } + /* If there is a space in arg0 then process probably has + * setproctitle so use the cmdline + */ + if (!match && strchr(cmd_arg0, ' ')) { + match = (strcmp(program, task.cmd)==0); + } safe_free(exe_link);