]> granicus.if.org Git - procps-ng/commitdiff
Support running with child namespaces
authorDebabrata Banerjee <dbanerje@akamai.com>
Wed, 8 Feb 2017 23:42:39 +0000 (18:42 -0500)
committerCraig Small <csmall@enc.com.au>
Sat, 3 Mar 2018 06:59:18 +0000 (17:59 +1100)
By default pgrep/pkill should not kill processes in a namespace it is not
part of. If this is allowed, it allows callers to break namespaces they did
not expect to affect, requiring rewrite of all callers to fix.

So by default, we should work in the current namespace. If --ns 0 is
specified, they we look at all namespaces, and if any other pid is specified
we continue to look in only that namespace.

Signed-off-by: Debabrata Banerjee <dbanerje@akamai.com>
pgrep.c

diff --git a/pgrep.c b/pgrep.c
index 73816bb11b32b4cc38c07becaf7e04fb85ae35d8..ed77a649a1404d66e207033b39dba66d03bdb6fb 100644 (file)
--- a/pgrep.c
+++ b/pgrep.c
@@ -129,7 +129,7 @@ static int __attribute__ ((__noreturn__)) usage(int opt)
        fputs(_(" -F, --pidfile <file>      read PIDs from file\n"), fp);
        fputs(_(" -L, --logpidfile          fail if PID file is not locked\n"), fp);
        fputs(_(" --ns <PID>                match the processes that belong to the same\n"
-               "                           namespace as <pid>\n"), fp);
+               "                           namespace as <pid> or 0 for all namespaces\n"), fp);
        fputs(_(" --nslist <ns,...>         list which namespaces will be considered for\n"
                "                           the --ns option.\n"
                "                           Available namespaces: ipc, mnt, net, pid, user, uts\n"), fp);
@@ -861,8 +861,6 @@ static void parse_opts (int argc, char **argv)
  *                     break; */
                case NS_OPTION:
                        opt_ns_pid = atoi(optarg);
-                       if (opt_ns_pid == 0)
-                               usage ('?');
                        ++criteria_count;
                        break;
                case NSLIST_OPTION:
@@ -916,6 +914,7 @@ int main (int argc, char **argv)
        textdomain(PACKAGE);
        atexit(close_stdout);
 
+       opt_ns_pid = getpid();
        parse_opts (argc, argv);
 
        procs = select_procs (&num);