procps-ng/pidof-show-workers-option.patch
DistroBaker 66034740b3 Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/procps-ng.git#53ec6254a89ef0f7cf11616dca0d76adddccc085
2020-12-22 19:02:31 +00:00

100 lines
3.3 KiB
Diff

diff --git a/pidof.1 b/pidof.1
index 8ef4abf..5f95b85 100644
--- a/pidof.1
+++ b/pidof.1
@@ -45,6 +45,9 @@ the current root directory of processes they do not own.
.IP \-x
Scripts too - this causes the program to also return process id's of
shells running the named scripts.
+.IP \-w
+Show also processes that do not have visible command line (e.g. kernel
+worker threads).
.IP "-o \fIomitpid\fP"
Tells \fIpidof\fP to omit processes with that process id. The special
pid \fB%PPID\fP can be used to name the parent process of the \fIpidof\fP
diff --git a/pidof.c b/pidof.c
index 90ecb13..0754754 100644
--- a/pidof.c
+++ b/pidof.c
@@ -55,6 +55,8 @@ static char *program = NULL;
static int opt_single_shot = 0; /* -s */
static int opt_scripts_too = 0; /* -x */
static int opt_rootdir_check = 0; /* -c */
+static int opt_with_workers = 0; /* -w */
+
static char *pidof_root = NULL;
@@ -69,6 +71,7 @@ static int __attribute__ ((__noreturn__)) usage(int opt)
fputs(_(" -s, --single-shot return one PID only\n"), fp);
fputs(_(" -c, --check-root omit processes with different root\n"), fp);
fputs(_(" -x also find shells running the named scripts\n"), fp);
+ fputs(_(" -w, --with-workers show kernel workers too\n"), fp);
fputs(_(" -o, --omit-pid <PID,...> omit processes with PID\n"), fp);
fputs(_(" -S, --separator SEP use SEP as separator put between PIDs"), fp);
fputs(USAGE_SEPARATOR, fp);
@@ -142,7 +145,6 @@ 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;
@@ -168,10 +170,9 @@ static void select_procs (void)
}
}
- if (!is_omitted(task.XXXID)) {
+ if (!is_omitted(task.XXXID) && ((task.cmdline && *task.cmdline) || opt_with_workers)) {
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 == '-') {
@@ -193,7 +194,7 @@ static void select_procs (void)
!strcmp(program_base, cmd_arg0) ||
!strcmp(program, cmd_arg0) ||
- !strcmp(program, stat_cmd) ||
+ (opt_with_workers && !strcmp(program, task.cmd)) ||
!strcmp(program, exe_link_base) ||
!strcmp(program, exe_link))
@@ -293,13 +294,14 @@ int main (int argc, char **argv)
int first_pid = 1;
const char *separator = " ";
- const char *opts = "scdnxmo:S:?Vh";
+ const char *opts = "scdnxwmo:S:?Vh";
static const struct option longopts[] = {
{"check-root", no_argument, NULL, 'c'},
{"single-shot", no_argument, NULL, 's'},
{"omit-pid", required_argument, NULL, 'o'},
{"separator", required_argument, NULL, 'S'},
+ {"with-workers", no_argument, NULL, 'w'},
{"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, 'V'},
{NULL, 0, NULL, 0}
@@ -325,6 +327,9 @@ int main (int argc, char **argv)
case 'x':
opt_scripts_too = 1;
break;
+ case 'w':
+ opt_with_workers = 1;
+ break;
case 'c':
if (geteuid() == 0) {
opt_rootdir_check = 1;
@@ -359,6 +364,8 @@ int main (int argc, char **argv)
program = argv[optind++];
+ if (*program == '\0') continue;
+
select_procs(); /* get the list of matching processes */
if (proc_count) {