I use ps ef
and ps rf
a lot.
Here is a sample output for ps rf
:
PID TTY STAT TIME COMMAND
3476 pts/0 S 0:00 su ...
3477 pts/0 S 0:02 \_ bash
8062 pts/0 T 1:16 \_ emacs -nw ...
15733 pts/0 R+ 0:00 \_ ps xf
15237 ? S 0:00 uwsgi ...
15293 ? S 0:00 \_ uwsgi ...
15294 ? S 0:00 \_ uwsgi ...
And today I needed to retrieve only the master process of uwsgi in a script (so I want only 15237 but not 15293 nor 15294).
As of today, I tried some ps rf | grep -v ' \_ '
... but I would like a cleaner way.
I also came accross another solution from unix.com's forums:
ps xf | sed '1d' | while read pid tty stat time command ; do [ -n "$(echo $command | egrep '^uwsgi')" ] && echo $pid ; done
But still a lot of pipes and ugly tricks.
Is there really no ps
option or cleaner tricks (maybe using awk) to accomplish that?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…