diff --git a/pidof-show-workers-option.patch b/pidof-show-workers-option.patch new file mode 100644 index 0000000..d674140 --- /dev/null +++ b/pidof-show-workers-option.patch @@ -0,0 +1,99 @@ +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 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) { diff --git a/pkill-manpage-e-option.patch b/pkill-manpage-e-option.patch new file mode 100644 index 0000000..8d306fe --- /dev/null +++ b/pkill-manpage-e-option.patch @@ -0,0 +1,22 @@ +commit 584c65ba375a4f7242ddeb74f6006f8f9f5c8d08 +Author: Jan Rybar +Date: Fri Nov 6 14:45:56 2020 +0000 + + pkill manpage to document '-e' option + +diff --git a/pgrep.1 b/pgrep.1 +index 9c29fb9c..a1810f0d 100644 +--- a/pgrep.1 ++++ b/pgrep.1 +@@ -62,6 +62,11 @@ newline). + .RB ( pgrep + only.) + .TP ++\fB\-e\fR, \fB\-\-echo\fR ++Display name and PID of the process being killed. ++.RB ( pkill ++only.) ++.TP + \fB\-f\fR, \fB\-\-full\fR + The + .I pattern diff --git a/procps-ng.spec b/procps-ng.spec index e54cd8a..eb1b183 100644 --- a/procps-ng.spec +++ b/procps-ng.spec @@ -4,7 +4,7 @@ Summary: System and process monitoring utilities Name: procps-ng Version: 3.3.16 -Release: 1%{?dist} +Release: 2%{?dist} License: GPL+ and GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+ URL: https://sourceforge.net/projects/procps-ng/ @@ -16,6 +16,9 @@ Source1: README.md Source2: README.top Patch1: pidof-show-worker-threads.patch +Patch2: pidof-show-workers-option.patch +Patch3: pkill-manpage-e-option.patch +Patch4: ps-exe-format-option.patch BuildRequires: ncurses-devel BuildRequires: libtool @@ -156,6 +159,13 @@ ln -s %{_bindir}/pidof %{buildroot}%{_sbindir}/pidof %exclude %{_mandir}/translated/* %changelog +* Tue Dec 22 2020 Jan Rybar - 3.3.16-2 +- ps: new exe format option to show real path to exe +- pidof: new -w option to show kernel worker threads +- pkill: manpage to document -e option +- Resolves: bz#1629413 +- Resolves: bz#1399206 + * Tue Aug 18 2020 Jan Rybar - 3.3.16-1 - Rebase to newest upstream version diff --git a/ps-exe-format-option.patch b/ps-exe-format-option.patch new file mode 100644 index 0000000..3d6dfa2 --- /dev/null +++ b/ps-exe-format-option.patch @@ -0,0 +1,58 @@ +diff --git a/ps/output.c b/ps/output.c +index e718f19..b66d543 100644 +--- a/ps/output.c ++++ b/ps/output.c +@@ -1250,6 +1250,26 @@ static int pr_luid(char *restrict const outbuf, const proc_t *restrict const pp) + } + + ++/* full path to executable */ ++static int pr_exe(char *restrict const outbuf, const proc_t *restrict const pp){ ++ char filename[48]; ++ ssize_t num_read = 0; ++ ++ snprintf(filename, sizeof filename, "/proc/%d/exe", pp->tgid); ++ ++ num_read = readlink(filename, outbuf, OUTBUF_SIZE-1); ++ if (num_read > 0) { ++ outbuf[num_read] = '\0'; ++ } ++ else { ++ outbuf[0] = '-'; ++ outbuf[1] = '\0'; ++ num_read = 1; ++ } ++ ++ return num_read; ++} ++ + /************************* Systemd stuff ********************************/ + static int pr_sd_unit(char *restrict const outbuf, const proc_t *restrict const pp){ + return snprintf(outbuf, COLWID, "%s", pp->sd_unit); +@@ -1533,6 +1553,7 @@ static const format_struct format_array[] = { + {"etimes", "ELAPSED", pr_etimes, sr_etime, 7, 0, BSD, ET|RIGHT}, /* FreeBSD */ + {"euid", "EUID", pr_euid, sr_euid, 5, 0, LNX, ET|RIGHT}, + {"euser", "EUSER", pr_euser, sr_euser, 8, USR, LNX, ET|USER}, ++{"exe", "EXE", pr_exe, sr_nop, 27, 0, LNX, PO|UNLIMITED}, + {"f", "F", pr_flag, sr_flags, 1, 0, XXX, ET|RIGHT}, /*flags*/ + {"fgid", "FGID", pr_fgid, sr_fgid, 5, 0, LNX, ET|RIGHT}, + {"fgroup", "FGROUP", pr_fgroup, sr_fgroup, 8, GRP, LNX, ET|USER}, +diff --git a/ps/ps.1 b/ps/ps.1 +index 844341c..6818667 100644 +--- a/ps/ps.1 ++++ b/ps/ps.1 +@@ -1253,6 +1253,14 @@ option can be used to force the decimal representation. (alias + .BR uname ", " user ). + T} + ++exe EXE T{ ++path to the executable. Useful if path cannot be printed via ++.BR cmd ", " comm ++or ++.BR args ++format options. ++T} ++ + f F T{ + flags associated with the process, see the + .B PROCESS FLAGS