在讨论 @netcoder的回答之后,他用了一个很好的技巧:
在 ps 上使用 f 总是会使上层的父节点很大。
这应该是有效的:$ ps hf -opid -C | awk '{ print $1; exit }'
就像我在评论中提到的,这将返回一个进程的pid 。
我愿意:ps rf -opid,cmd -C | awk '$2!~/^[|]/{ print $1 }'
也就是:列表运行 processses r ( 或者 e 如果你想要一切)
父/子图形 f 一起
只输出pid和命令名 -opid,cmd
仅针对给定的进程 -C
然后如果 2nd 字段是命令( -opid,cmd ) - 不是从 或者 | 开始,那么它是一个父进程,所以输出 1st 字段。
简单测试:$ 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]
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 }'
PID
2800
2794
$ # also supressing the header of ps (top line 'PID') -- add 'h' to ps
$ ps hf -opid,cmd -Cchromium | awk '$2!~/^[|]/{ print $1 }'
2800
2794