]> granicus.if.org Git - procps-ng/commitdiff
Merge branch 'teknoraver/procps-master'
authorCraig Small <csmall@dropbear.xyz>
Tue, 22 Dec 2020 03:32:26 +0000 (14:32 +1100)
committerCraig Small <csmall@dropbear.xyz>
Tue, 22 Dec 2020 03:36:09 +0000 (14:36 +1100)
References:
 procps-ng/procps!83

NEWS
pidof.1
pidof.c

diff --git a/NEWS b/NEWS
index 5962e3ad167e3c30998d32d577bb50a9cbf5ccbc..7457d6a246d4aa1d274add072b9c613ee8b2fc6f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ procps-ng NEXT
   * pgrep: Pass int to signalled process                   merge #32
   * pgrep: Check sanity of SG_ARG_MAX                      issue #152
   * pgrep: Add older than selection                        merge #79
+  * pidof: Quiet mode                                      merge #83
   * pidof: show worker threads                             Redhat #1803640
   * ps.1: Mention stime alias                              issue #164
   * ps: check also match on truncated 16 char comm names
diff --git a/pidof.1 b/pidof.1
index 5ed61cdd9b6b1c29d255356c8d4abfd756f488fd..9fb4df7468de774079185ebeecea6bd5a0746ff5 100644 (file)
--- a/pidof.1
+++ b/pidof.1
 .\" along with this program; if not, write to the Free Software
 .\" 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
 pidof -- find the process ID of a running program
 .SH SYNOPSIS
 .B pidof
 .RB [ \-s ]
 .RB [ \-c ]
+.RB [ \-q ]
+.RB [ \-w ]
 .RB [ \-x ]
 .RB [ \-o
-.IR omitpid[,omitpid...] ]
-.RB [ \-o
 .IR omitpid[,omitpid...]... ]
 .RB [ \-S
 .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.
 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.
-.IP \-x
-Scripts too - this causes the program to also return process id's of
-shells running the named scripts.
+.IP \-q
+Quiet mode, suppress any output and only sets the exit status accordingly.
 .IP \-w
 Show also processes that do not have visible command line (e.g. kernel
 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"
 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 7e9cf37b6ede5c601a9baea6160d8bc1fd322cf8..8c2ac2acd7ed1d1a34a79e61d360553549851388 100644 (file)
--- a/pidof.c
+++ b/pidof.c
@@ -58,7 +58,7 @@ 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 int opt_quiet          = 0;  /* -q */
 
 static char *pidof_root = NULL;
 
@@ -72,8 +72,9 @@ static int __attribute__ ((__noreturn__)) usage(int opt)
        fputs(USAGE_OPTIONS, fp);
        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(_(" -q,                       quiet mode, only set the exit code\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(_(" -S, --separator SEP       use SEP as separator put between PIDs"), fp);
        fputs(USAGE_SEPARATOR, fp);
@@ -299,13 +300,14 @@ int main (int argc, char **argv)
        int first_pid = 1;
 
        const char *separator = " ";
-       const char *opts = "scnxwmo:S:?Vh";
+       const char *opts = "scnqxwmo: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'},
+               {"quiet", no_argument, NULL, 'q'},
                {"with-workers", no_argument, NULL, 'w'},
                {"help", no_argument, NULL, 'h'},
                {"version", no_argument, NULL, 'V'},
@@ -323,6 +325,9 @@ int main (int argc, char **argv)
        /* process command-line options */
        while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != -1) {
                switch (opt) {
+               case 'q':
+                       opt_quiet = 1;
+                       /* fallthrough */
                case 's':
                        opt_single_shot = 1;
                        break;
@@ -377,11 +382,13 @@ int main (int argc, char **argv)
 
                        found = 1;
                        for (i = proc_count - 1; i >= 0; i--) { /* and display their PIDs */
-                               if (first_pid) {
-                                       first_pid = 0;
-                                       printf ("%ld", (long) procs[i].pid);
-                               } else {
-                                       printf ("%s%ld", separator, (long) procs[i].pid);
+                               if (!opt_quiet) {
+                                       if (first_pid) {
+                                               first_pid = 0;
+                                               printf ("%ld", (long) procs[i].pid);
+                                       } else {
+                                               printf ("%s%ld", separator, (long) procs[i].pid);
+                                       }
                                }
                                if (opt_single_shot) break;
                        }
@@ -391,7 +398,7 @@ int main (int argc, char **argv)
        }
 
        /* final line feed */
-       if (found) printf("\n");
+       if (!opt_quiet && found) printf("\n");
 
        /* some cleaning */
        safe_free(procs);