Merge branch 'teknoraver/procps-master'

References:
 procps-ng/procps!83
This commit is contained in:
Craig Small 2020-12-22 14:32:26 +11:00
commit bf92199ccb
3 changed files with 25 additions and 15 deletions

1
NEWS
View File

@ -5,6 +5,7 @@ procps-ng NEXT
* pgrep: Pass int to signalled process merge #32 * pgrep: Pass int to signalled process merge #32
* pgrep: Check sanity of SG_ARG_MAX issue #152 * pgrep: Check sanity of SG_ARG_MAX issue #152
* pgrep: Add older than selection merge #79 * pgrep: Add older than selection merge #79
* pidof: Quiet mode merge #83
* pidof: show worker threads Redhat #1803640 * pidof: show worker threads Redhat #1803640
* ps.1: Mention stime alias issue #164 * ps.1: Mention stime alias issue #164
* ps: check also match on truncated 16 char comm names * ps: check also match on truncated 16 char comm names

14
pidof.1
View File

@ -15,17 +15,17 @@
.\" along with this program; if not, write to the Free Software .\" along with this program; if not, write to the Free Software
.\" Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA .\" Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
.\" .\"
.TH PIDOF 1 "2020-06-04" "" "User Commands" .TH PIDOF 1 "2020-12-22" "" "User Commands"
.SH NAME .SH NAME
pidof -- find the process ID of a running program pidof -- find the process ID of a running program
.SH SYNOPSIS .SH SYNOPSIS
.B pidof .B pidof
.RB [ \-s ] .RB [ \-s ]
.RB [ \-c ] .RB [ \-c ]
.RB [ \-q ]
.RB [ \-w ]
.RB [ \-x ] .RB [ \-x ]
.RB [ \-o .RB [ \-o
.IR omitpid[,omitpid...] ]
.RB [ \-o
.IR omitpid[,omitpid...]... ] .IR omitpid[,omitpid...]... ]
.RB [ \-S .RB [ \-S
.IR separator ] .IR separator ]
@ -42,12 +42,14 @@ Single shot - this instructs the program to only return one \fIpid\fP.
Only return process ids that are running with the same root directory. Only return process ids that are running with the same root directory.
This option is ignored for non-root users, as they will be unable to check This option is ignored for non-root users, as they will be unable to check
the current root directory of processes they do not own. the current root directory of processes they do not own.
.IP \-x .IP \-q
Scripts too - this causes the program to also return process id's of Quiet mode, suppress any output and only sets the exit status accordingly.
shells running the named scripts.
.IP \-w .IP \-w
Show also processes that do not have visible command line (e.g. kernel Show also processes that do not have visible command line (e.g. kernel
worker threads). worker threads).
.IP \-x
Scripts too - this causes the program to also return process id's of
shells running the named scripts.
.IP "-o \fIomitpid\fP" .IP "-o \fIomitpid\fP"
Tells \fIpidof\fP to omit processes with that process id. The special 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 pid \fB%PPID\fP can be used to name the parent process of the \fIpidof\fP

25
pidof.c
View File

@ -56,7 +56,7 @@ static int opt_single_shot = 0; /* -s */
static int opt_scripts_too = 0; /* -x */ static int opt_scripts_too = 0; /* -x */
static int opt_rootdir_check = 0; /* -c */ static int opt_rootdir_check = 0; /* -c */
static int opt_with_workers = 0; /* -w */ static int opt_with_workers = 0; /* -w */
static int opt_quiet = 0; /* -q */
static char *pidof_root = NULL; static char *pidof_root = NULL;
@ -70,8 +70,9 @@ static int __attribute__ ((__noreturn__)) usage(int opt)
fputs(USAGE_OPTIONS, fp); fputs(USAGE_OPTIONS, fp);
fputs(_(" -s, --single-shot return one PID only\n"), fp); fputs(_(" -s, --single-shot return one PID only\n"), fp);
fputs(_(" -c, --check-root omit processes with different root\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(_(" -q, quiet mode, only set the exit code\n"), fp);
fputs(_(" -w, --with-workers show kernel workers too\n"), fp); fputs(_(" -w, --with-workers show kernel workers too\n"), fp);
fputs(_(" -x also find shells running the named scripts\n"), fp);
fputs(_(" -o, --omit-pid <PID,...> omit processes with PID\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(_(" -S, --separator SEP use SEP as separator put between PIDs"), fp);
fputs(USAGE_SEPARATOR, fp); fputs(USAGE_SEPARATOR, fp);
@ -294,13 +295,14 @@ int main (int argc, char **argv)
int first_pid = 1; int first_pid = 1;
const char *separator = " "; const char *separator = " ";
const char *opts = "scnxwmo:S:?Vh"; const char *opts = "scnqxwmo:S:?Vh";
static const struct option longopts[] = { static const struct option longopts[] = {
{"check-root", no_argument, NULL, 'c'}, {"check-root", no_argument, NULL, 'c'},
{"single-shot", no_argument, NULL, 's'}, {"single-shot", no_argument, NULL, 's'},
{"omit-pid", required_argument, NULL, 'o'}, {"omit-pid", required_argument, NULL, 'o'},
{"separator", required_argument, NULL, 'S'}, {"separator", required_argument, NULL, 'S'},
{"quiet", no_argument, NULL, 'q'},
{"with-workers", no_argument, NULL, 'w'}, {"with-workers", no_argument, NULL, 'w'},
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, 'V'}, {"version", no_argument, NULL, 'V'},
@ -318,6 +320,9 @@ int main (int argc, char **argv)
/* process command-line options */ /* process command-line options */
while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != -1) { while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != -1) {
switch (opt) { switch (opt) {
case 'q':
opt_quiet = 1;
/* fallthrough */
case 's': case 's':
opt_single_shot = 1; opt_single_shot = 1;
break; break;
@ -372,11 +377,13 @@ int main (int argc, char **argv)
found = 1; found = 1;
for (i = proc_count - 1; i >= 0; i--) { /* and display their PIDs */ for (i = proc_count - 1; i >= 0; i--) { /* and display their PIDs */
if (first_pid) { if (!opt_quiet) {
first_pid = 0; if (first_pid) {
printf ("%ld", (long) procs[i].pid); first_pid = 0;
} else { printf ("%ld", (long) procs[i].pid);
printf ("%s%ld", separator, (long) procs[i].pid); } else {
printf ("%s%ld", separator, (long) procs[i].pid);
}
} }
if (opt_single_shot) break; if (opt_single_shot) break;
} }
@ -386,7 +393,7 @@ int main (int argc, char **argv)
} }
/* final line feed */ /* final line feed */
if (found) printf("\n"); if (!opt_quiet && found) printf("\n");
/* some cleaning */ /* some cleaning */
safe_free(procs); safe_free(procs);