理论上:
top -n 1 | tail -n +8 | grep -Ev ' root | myUserName ' |
sed -e 's/^[ ]*\([0-9][0-9]*\) .*/\1/'
该sed
命令查找行首、可选空格、后跟数字以及空格和尾随垃圾。但是,这不起作用,因为会top
生成屏幕控制字符:
28433 jleffler 20 0 1511m 403m 31m S 2 1.3 70:35.76 chrome
看起来不错,但是当通过十六进制转储推送时,输出为:
0x0000: 1B 28 42 1B 5B 6D 32 38 34 33 33 20 6A 6C 65 66 .(B.[m28433 jlef
0x0010: 66 6C 65 72 20 20 32 30 20 20 20 30 20 31 35 31 fler 20 0 151
0x0020: 30 6D 20 34 30 34 6D 20 20 33 31 6D 20 53 20 20 0m 404m 31m S
0x0030: 20 20 34 20 20 31 2E 33 20 20 37 30 3A 33 37 2E 4 1.3 70:37.
0x0040: 38 37 20 63 68 72 6F 6D 65 20 20 20 20 20 20 20 87 chrome
要抑制这种情况,请使用top -b
(批处理模式):
top -b -n 1 | tail -n +8 | grep -Ev ' root | myUserName ' |
sed -e 's/^[ ]*\([0-9][0-9]*\) .*/\1/'
这应该生成一个 PID 列表;它对我有用。
如果您被允许awk
,您可以将其简化为:
top -b -n 1 | awk 'NR<=8 || $2~/^(root|myUserName)$/ {next} {print $1}'
所有这一切都基于“使用top
是一种好方法”,而不是使用ps
(这是用于收集 PID 的常规工具。