在 UNIX 中从顶部提取 PID

Extract PID from top in UNIX

我想从顶部提取所需进程和用户的 PID。因此,我可以使用此命令 top -u meh 获得持续更新的列表,但是如何从此处为用户 meh 提取 java 的 PID 并获得以下结果?

$top -u meh 

34249 meh     20   0   36.7g  11.7g   2240 S  97.0  1.5   2594:00 java
36864 meh     20   0   37.7g  12.2g   2232 S  97.0  1.6   2588:58 java
33607 meh     20   0   37.9g  12.2g   2244 S  96.7  1.6   2584:22 java
17027 meh     20   0  163228   3420   1596 R   1.0  0.0   0:00.10 top
  617 meh     20   0  117872    316    312 S   0.0  0.0   0:00.12 bash
 1626 meh     20   0  117872    236    236 S   0.0  0.0   0:00.10 bash
 2056 meh     20   0  130624    276    276 S   0.0  0.0   0:00.06 screen
 2057 meh     20   0  117892    312    308 S   0.0  0.0   0:00.08 bash
 3912 meh     20   0  117892    248    248 S   0.0  0.0   0:00.07 bash
 4516 meh     20   0  117872    236    236 S   0.0  0.0   0:00.09 bash
 7166 meh     20   0  117872    312    308 S   0.0  0.0   0:00.09 bash

结果:

34249 36864 33607
ps -aux | grep 'meh' | grep 'java' | awk '{print }'

首先使用ps打印所有进程 首先 grep 按 meh 列出所有进程, 第二个 grep 仅列出包含 java 的那些(在前一组中) 然后它用 awk

打印第二列

编辑: 如果您不想匹配其中包含 java 关键字的其他进程,您可以告诉 ps 您要查找的程序:

ps -C java -o user,pid | grep 'meh' | awk '{print }'

这是它的基线,如果你想要特定的用户,你可以添加更多的 grep 和管道

top -p $(ps -fea|grep -i java |grep -v grep|cut -d' ' -f3 | tr '\n' ','|  head --bytes -1 )