【问题标题】:Complex awk for getting Linux process information获取 Linux 进程信息的复杂 awk
【发布时间】:2015-08-17 16:58:47
【问题描述】:

我希望能够使用 '/bin/ps -C httpd u'(或任何进程)的输出并使用 awk 将所有 %MEM 一起添加到变量中。

示例输出为:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      9636  0.0  1.4 509264 14456 ?        Ss   17:34   0:00 /usr/sbin/httpd -DFOREGROUND
apache    9639  1.6  7.0 679916 71236 ?        S    17:34   1:13 /usr/sbin/httpd -DFOREGROUND
apache    9641  1.6  7.0 680312 71456 ?        S    17:34   1:14 /usr/sbin/httpd -DFOREGROUND
apache    9644  1.5  7.0 680320 71356 ?        S    17:34   1:12 /usr/sbin/httpd -DFOREGROUND
apache    9645  1.5  7.0 679904 71464 ?        S    17:34   1:08 /usr/sbin/httpd -DFOREGROUND
apache    9646  1.7  7.0 680156 71448 ?        S    17:34   1:18 /usr/sbin/httpd -DFOREGROUND
apache    9653  1.6  6.9 679640 70572 ?        S    17:34   1:12 /usr/sbin/httpd -DFOREGROUND
apache    9660  1.4  7.0 679972 71240 ?        S    17:34   1:07 /usr/sbin/httpd -DFOREGROUND
apache   11248  1.6  7.1 680020 72308 ?        S    17:39   1:10 /usr/sbin/httpd -DFOREGROUND

我一直在使用另一个命令来实现类似的东西来获取所有内核的平均 CPU 使用率,所以我认为对 ps 做类似的东西一定是可能的。

CpuUtil=`LANG=en_GB.UTF-8 mpstat 1 1 |
         awk '$2 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $2 ~ /all/ { print 100 - $field}' |
         tail -1`

以上输出所有cpu的平均CPU百分比。

所以我的目标是有一个变量输出用于作为参数传递的进程的所有实例的总内存百分比。

TotalProcMemUsage=`/bin/ps -C httpd u | awk .... `

在 awk 之后我有点迷茫,我应该学习,但我现在没有时间。

【问题讨论】:

    标签: bash memory awk


    【解决方案1】:

    您可以告诉ps 仅输出%MEM 字段,这样可以更轻松地解释结果。你根本不需要awk

    ps -C httpd -o%mem= | paste -sd+ | bc
    

    man ps 描述了您可以在-o 选项中使用的所有可能的关键字;您可以指定多个,以逗号分隔。关键字后面的 = 表示头部应该被省略,这意味着你不必忽略它。

    您可以将结果输入awk,但paste -sd+ | bc 是一种用于添加数字列表的简短惯用语,每行一个。

    【讨论】:

    • 谢谢。这似乎正是我所需要的。
    【解决方案2】:

    解释您的问题,您想将输入第 4 列中的值相加,忽略输入的前 1 行。可以做到的:

     ps -C httpd |
     awk -v skip=1 -v column=4 'NR<=skip {next} { sum += $column } END { print sum }'
    

    【讨论】:

    • 感谢我正在寻找的这个 awk 版本。然而,Rici 的回答可能是一个更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多