From 2d32ee17c98b11f494aa6ce79ab3b49e97b1562c Mon Sep 17 00:00:00 2001 From: Jan Rybar Date: Tue, 7 Apr 2020 13:41:48 +0200 Subject: [PATCH] pidof: show worker threads 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 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pidof.c b/pidof.c index b0d08cc4..90ecb132 100644 --- 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);