]> granicus.if.org Git - procps-ng/commitdiff
ps --ppid
authoralbert <>
Sun, 9 Feb 2003 07:31:11 +0000 (07:31 +0000)
committeralbert <>
Sun, 9 Feb 2003 07:31:11 +0000 (07:31 +0000)
NEWS
ps/common.h
ps/display.c
ps/help.c
ps/parser.c
ps/ps.1
ps/select.c

diff --git a/NEWS b/NEWS
index 6a401b5366078d6563be356aca4cc999ce434a92..0d69cc7b4488534ba87f3b1a3702546f1071dcb8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,6 @@
 procps-3.1.5 --> procps-3.1.6
 
+ps: new --ppid option selects by PPID
 watch: new --no-title option
 handle SPARC Linux badness
 rare crash fixed
index 6cb6c14e0c09f755a4601482813423886c1e79f7..5cea9341bd205647cac68dfb8d3820219ec0f9ed 100644 (file)
@@ -40,6 +40,7 @@
 #define SEL_TTY  11
 #define SEL_SESS 12
 #define SEL_COMM 13
+#define SEL_PPID 14
 
 /* Since an enum could be smashed by a #define, it would be bad. */
 #define U98  0 /* Unix98 standard */    /* This must be 0 */
 
 typedef union sel_union {
   pid_t pid;
+  pid_t ppid;
   uid_t uid;
   gid_t gid;
   dev_t tty;
index b8475de66c5572615c469dfba083414672d32147..bb791076d635feaf5ab59a20c592327a724dd7aa 100644 (file)
@@ -143,6 +143,7 @@ static void arg_show(void){
     case SEL_FGID: show_gid("FGID", walk->n, walk->u); break;
     case SEL_PGRP: show_pid("PGRP", walk->n, walk->u); break;
     case SEL_PID : show_pid("PID ", walk->n, walk->u); break;
+    case SEL_PPID: show_pid("PPID", walk->n, walk->u); break;
     case SEL_TTY : show_tty("TTY ", walk->n, walk->u); break;
     case SEL_SESS: show_pid("SESS", walk->n, walk->u); break;
     case SEL_COMM: show_cmd("COMM", walk->n, walk->u); break;
index 0b091a83dd5f75cc423f50b2b17e8703548de6c9..ab195aa8fd493f93cb9e6bc1050c314d6c6c9655 100644 (file)
--- a/ps/help.c
+++ b/ps/help.c
@@ -30,7 +30,7 @@ const char *help_message =
 "r  only running processes             U  processes for specified users\n"
 "x  processes w/o controlling ttys     t  by tty\n"
 "*********** output format **********  *********** long options ***********\n"
-"-o,o user-defined  -f full            --Group --User --pid --cols\n"
+"-o,o user-defined  -f full            --Group --User --pid --cols --ppid\n"
 "-j,j job control   s  signal          --group --user --sid --rows\n"
 "-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect\n"
 "-l,l long          u  user-oriented   --sort --tty --forest --version\n"
index a7ac4a7191f0c6eab00501b86e1d329a75a35d89..6f250043af5a638a90624642efb2fe1f9e96df7c 100644 (file)
@@ -753,6 +753,7 @@ static const char *parse_gnu_option(void){
   {"noheading",     &&case_noheading},
   {"noheadings",    &&case_noheadings},
   {"pid",           &&case_pid},
+  {"ppid",          &&case_ppid},
   {"rows",          &&case_rows},
   {"secsid",        &&case_secsid},
   {"sid",           &&case_sid},
@@ -881,6 +882,14 @@ static const char *parse_gnu_option(void){
     if(err) return err;
     selection_list->typecode = SEL_PID;
     return NULL;
+  case_ppid:
+    trace("--ppid\n");
+    arg = grab_gnu_arg();
+    if(!arg) return "List of process IDs must follow --ppid.";
+    err=parse_list(arg, parse_pid);
+    if(err) return err;
+    selection_list->typecode = SEL_PPID;
+    return NULL;
   case_rows:
   case_lines:
     trace("--rows\n");
diff --git a/ps/ps.1 b/ps/ps.1
index 4f2edc32738269f6a968022a83132af87a004500..bcd0afd6d7f846707bc46ca9d9749530e5134a9c 100644 (file)
--- a/ps/ps.1
+++ b/ps/ps.1
@@ -72,6 +72,7 @@ t            select by tty
 --User       select by real user name or ID
 --group      select by effective group name or ID
 --pid        select by process ID
+--ppid       select by parent process ID
 --sid        select by session ID
 --tty        select by terminal
 --user       select by effective user name or ID
index b582550c597d1b3c04479775061ddcf47c5ed4cd..aecc59d4b56819eb59ceb7adcb9ae3d209151e2f 100644 (file)
@@ -102,6 +102,7 @@ static int proc_was_listed(proc_t *buf){
 
     break; case SEL_PGRP: return_if_match(pgrp,pid);
     break; case SEL_PID : return_if_match(pid,pid);
+    break; case SEL_PPID: return_if_match(ppid,ppid);
     break; case SEL_TTY : return_if_match(tty,tty);
     break; case SEL_SESS: return_if_match(session,pid);