]> granicus.if.org Git - procps-ng/commitdiff
pidof: show worker threads
authorJan Rybar <jrybar@redhat.com>
Tue, 7 Apr 2020 11:41:48 +0000 (13:41 +0200)
committerCraig Small <csmall@dropbear.xyz>
Fri, 10 Apr 2020 04:42:56 +0000 (04:42 +0000)
Reimplementation of pidof for procps toolset contains sort of deactivated code and does not return results for processes without task.cmdline entry (usually kernel worker threads). Old pidof and pgrep do that in comparison. Despite all perks provided by using pgrep instead, pidof should show those workers again.

pidof.c

diff --git a/pidof.c b/pidof.c
index b0d08cc40231b3871a6fe4e4c1d02123cec910db..90ecb1321473299e69e0bb2f5e6164991ad93290 100644 (file)
--- a/pidof.c
+++ b/pidof.c
@@ -142,6 +142,7 @@ static void select_procs (void)
        static int size = 0;
        char *cmd_arg0, *cmd_arg0base;
        char *cmd_arg1, *cmd_arg1base;
+       char *stat_cmd;
        char *program_base;
        char *root_link;
        char *exe_link;
@@ -167,9 +168,10 @@ static void select_procs (void)
                        }
                }
 
-               if (!is_omitted(task.XXXID) && task.cmdline && *task.cmdline) {
+               if (!is_omitted(task.XXXID)) {
 
-                       cmd_arg0 = *task.cmdline;
+                       cmd_arg0 = (task.cmdline && *task.cmdline) ? *task.cmdline : "\0";
+                       stat_cmd = task.cmd ? task.cmd : "\0";
 
                        /* processes starting with '-' are login shells */
                        if (*cmd_arg0 == '-') {
@@ -191,12 +193,14 @@ static void select_procs (void)
                            !strcmp(program_base, cmd_arg0) ||
                            !strcmp(program, cmd_arg0) ||
 
+                           !strcmp(program, stat_cmd) ||
+
                            !strcmp(program, exe_link_base) ||
                            !strcmp(program, exe_link))
                        {
                                match = 1;
 
-                       } else if (opt_scripts_too && *(task.cmdline+1)) {
+                       } else if (opt_scripts_too && task.cmdline && *(task.cmdline+1)) {
 
                                cmd_arg1 = *(task.cmdline+1);