【问题标题】:Extract PID from top in UNIX [closed]在 UNIX 中从顶部提取 PID [关闭]
【发布时间】:2020-06-18 17:29:12
【问题描述】:

我想从顶部提取所需进程和用户的 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

【问题讨论】:

    标签: linux string unix system pid


    【解决方案1】:

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

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

    【讨论】:

    • grep -i '[j]ava' 消除了对 grep grep -v grep 进行反 grep 的需要,因此从管道中消除了一个进程。并不是说这会有很大的不同,但是嗯。 — 和/或使用grep -F / fgrep,因为没有使用实际的正则表达式。
    【解决方案2】:
    ps -aux | grep 'meh' | grep 'java' | awk '{print $2}'
    

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

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

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

    【讨论】:

    • 实际上,它也在提取非Java PID。没用。
    • 您的意思是它还提取了在 java 上运行的实用程序,但您只想列出 java 主进程?编辑我的答案给你更严格的例子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多