与@netprer讨论答案后,他使用了一个不错的技巧:D
使用
fon
ps总是可以使父项位于最前面。
这应该工作:
$ ps hf -opid -C <process> | awk '{ print $1; exit }'正如我在评论中提到的那样,这只会返回
pid一个过程。
我会去:
ps rf -opid,cmd -C <process-name> | awk '$2 !~ /^[|\]/ { print $1 }'那是:
- 列出正在运行的进程
r
(或者e
如果您需要所有内容) - 连同父母/孩子图
f
- 仅输出pid和命令名称
-opid,cmd
- 仅针对给定的过程
-C <process>
然后
- 如果第二个字段(即命令(
-opid,cmd
))不是以a开头,或者|
它是父进程,那么请打印第一个字段(即pid)。
简单测试:
$ ps f -opid,cmd -Cchromium PID CMD 2800 /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox 2803 _ /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox 2899 _ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB 2906 | _ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn [ ... snip ... ] 2861 _ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB 2863 _ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn 2794 /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium 2796 _ /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium 3918 _ /usr/lib/chromium/chromium --type=gpu-process --channel=2794.45.1891443837 --gpu-vendor-id=0x10de --gpu-device-id=0x0611 --gpu-driver-version -25308 _ [chromium] <defunct>31932 _ /usr/lib/chromium/chromium --type=plugin --plugin-path=/usr/lib/mozilla/plugins/libflashplayer.so --lang=en-US --channel=2794.1330.1990362572$ ps f -opid,cmd -Cchromium | awk '$2 !~ /^[|\]/ { print $1 }'PID28002794$ # also supressing the header of ps (top line 'PID') -- add 'h' to ps$ ps hf -opid,cmd -Cchromium | awk '$2 !~ /^[|\]/ { print $1 }'28002794


