]> granicus.if.org Git - procps-ng/commitdiff
pidof: allow to change a separator put between pids
authorMasatake YAMATO <yamato@redhat.com>
Sat, 24 Feb 2018 09:03:11 +0000 (18:03 +0900)
committerCraig Small <csmall@enc.com.au>
Fri, 2 Mar 2018 10:42:46 +0000 (21:42 +1100)
I frequency use pidof command with strace system call tracer.
strace can trace MULTIPLE processes specified with "-p $PID"
arguments like:

  strace -p 1 -p 1030 -p 3043

Sometimes I want to do as following

  strace -p $(pidof httpd)

However, above command line doesn't work because -p option
is needed for specifying a pid. pidof uses a whitespace as
a separator. For passing the output to strace, the separator
should be replaced with ' -p '.

This maybe not a special to my use case.

This commit introduces -S option that allows a user to specify a
separator the one wants.

    $ ./pidof bash
    ./pidof bash
    24624 18790 12786 11898 11546 10766 7654 5095
    $ ./pidof -S ',' bash
    ./pidof -S ',' bash
    24624,18790,12786,11898,11546,10766,7654,5095
    $ ./pidof -S '-p ' bash
    ./pidof -S '-p ' bash
    24624-p 18790-p 12786-p 11898-p 11546-p 10766-p 7654-p 5095
    $ ./pidof -S ' -p ' bash
    ./pidof -S ' -p ' bash
    24624 -p 18790 -p 12786 -p 11898 -p 11546 -p 10766 -p 7654 -p 5095
    $ strace -p $(./pidof -S ' -p ' bash)
    strace -p $(./pidof -S ' -p ' bash)
    strace: Process 24624 attached
    strace: Process 18790 attached
    strace: Process 12786 attached
    ...

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
pidof.1
pidof.c

diff --git a/pidof.1 b/pidof.1
index f49cd2340f95018f7465fbda4c124b99fabd33fe..15b40317a6c384e36c6ff02c62bae8a751f2e015 100644 (file)
--- a/pidof.1
+++ b/pidof.1
@@ -27,6 +27,8 @@ pidof -- find the process ID of a running program.
 .IR omitpid[,omitpid..] ]
 .RB [ \-o
 .IR omitpid[,omitpid..].. ]
+.RB [ \-S
+.IR separator ]
 .B program
 .RB [ program.. ]
 .SH DESCRIPTION
@@ -47,6 +49,9 @@ shells running the named scripts.
 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
 program, in other words the calling shell or shell script.
+.IP "-S \fIseparator\fP"
+Use \fIseparator\fP as a separator put between pids. Used only when
+more than one pids are printed for the program.
 .SH "EXIT STATUS"
 .TP
 .B 0
diff --git a/pidof.c b/pidof.c
index 01f0c0a1a2ead11b3ad93483d3394d0ad0a19c95..8159147daf6238a25bf863bd9583f22ad891a6d8 100644 (file)
--- a/pidof.c
+++ b/pidof.c
@@ -64,6 +64,7 @@ static int __attribute__ ((__noreturn__)) usage(int opt)
        fputs(_(" -c, --check-root          omit processes with different root\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);
        fputs(USAGE_HELP, fp);
        fputs(USAGE_VERSION, fp);
@@ -287,12 +288,14 @@ int main (int argc, char **argv)
        int found = 0;
        int first_pid = 1;
 
-       const char *opts = "scnxmo:?Vh";
+       const char *separator = " ";
+       const char *opts = "scnxmo: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'},
                {"help", no_argument, NULL, 'h'},
                {"version", no_argument, NULL, 'V'},
                {NULL, 0, NULL, 0}
@@ -324,6 +327,9 @@ int main (int argc, char **argv)
                                pidof_root = pid_link(getpid(), "root");
                        }
                        break;
+               case 'S':
+                       separator = optarg;
+                       break;
                case 'V':
                        printf (PROCPS_NG_VERSION);
                        exit (EXIT_SUCCESS);
@@ -357,7 +363,7 @@ int main (int argc, char **argv)
                                        first_pid = 0;
                                        printf ("%ld", (long) procs[i].pid);
                                } else {
-                                       printf (" %ld", (long) procs[i].pid);
+                                       printf ("%s%ld", separator, (long) procs[i].pid);
                                }
                                if (opt_single_shot) break;
                        }