
Chris Samuel <chris@csamuel.org> writes:
Hi folks,
This is likely an easy one, but my brain is fading rapidly at the moment..
Is there a way to easily collect all child (and grandchild, etc) processes of a particular process?
I know I can do ps --ppid $PID to get the immediate children, and I can use pstree -p $PID to see all the descendants in graphical form, but I want to get an easy to parse list.
Any ideas, or is this a case of writing it myself?
HTFU and write it. It's just simple recursion. $ f(){ for i; do x=$(pgrep -P $i)&& { echo $x;f $x; } ;done; } Testing: $ ps fux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND twb 25223 0.0 0.1 4572 1072 tty1 S+ Jun16 0:09 screen -DRR twb 20322 2.8 5.8 47476 43724 ? Ss Jun18 395:58 emacs --daemon twb 1056 0.4 1.6 15988 12548 ? Ss Jun10 126:37 SCREEN -DRR twb 1057 0.0 0.0 3372 464 ? S Jun10 0:00 \_ tail -f /home/twb/.emacs.d/irc-activity twb 20318 0.0 0.0 1588 600 pts/0 Ss+ Jun18 0:00 \_ emacsclient --tty -c twb 5927 1.3 2.1 20044 16236 pts/3 Ss+ 10:33 0:40 \_ emacs -f gnus twb 6444 0.5 0.3 5976 2936 pts/1 Ss 11:18 0:01 \_ bash twb 6532 0.0 0.1 4192 872 pts/1 R+ 11:21 0:00 | \_ ps fux twb 6514 7.0 0.3 5976 2928 pts/2 Ss 11:21 0:00 \_ bash twb 6531 0.5 0.0 3344 432 pts/2 S+ 11:21 0:00 \_ sleep 1h twb 1051 0.0 0.0 2664 720 ? Ss Jun10 0:01 //bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session twb 1050 0.0 0.0 4592 588 ? Ss Jun10 2:32 gpg-agent --daemon twb 1042 0.0 0.0 2628 524 ? Ss Jun10 1:46 ssh-agent -t12h $ f 1056 1057 5927 6444 6514 20318 6531 $