我想使用top以通过进程名称监视众多进程。我已经知道这样做$ top -p $(pgrep -d ',' <pattern>),但top只限制我 20 个 pid。有没有办法允许超过 20 个 pid?
我必须使用ps和的组合watch来获得相似的结果吗?
我想使用top以通过进程名称监视众多进程。我已经知道这样做$ top -p $(pgrep -d ',' <pattern>),但top只限制我 20 个 pid。有没有办法允许超过 20 个 pid?
我必须使用ps和的组合watch来获得相似的结果吗?
来自top/top.c:
if (Monpidsidx >= MONPIDMAX)
error_exit(fmtmk(N_fmt(LIMIT_exceed_fmt), MONPIDMAX));
(LIMIT_exceed_fmt您收到的错误消息在哪里)。
并在top/top.h:
#define MONPIDMAX 20
我将此数字更改为 80,这似乎可以正常工作。不知道为什么这个硬编码限制如此之低。
因此,如果可以选择手动编译procps-ng,那么您可以这样做。你不需要更换系统顶部(或需要root权限),你可以把它放在你的homedir中。
另一种解决方法可能是使用tmuxorscreen和多个top实例。
另一种可能的解决方案可能是使用ps循环,即。
#!/bin/sh
while :; do
clear
ps $*
sleep 1
done
调用它:./psloop.sh 42 666
您可能需要添加更多标志以ps获取更多信息。另请注意,这效率较低,因为它每秒会调用 3 个二进制文件。
带手表的包装纸。使用 Ubuntu 11.04、Ubuntu 14.04、RHEL5、RHEL6 和 RHEL7 测试
语法:script.sh pid [ pid ...] #空格分隔
script.sh $(pgrep -d ' ' <pattern>)
#!/bin/bash
i=10 # ~ 以秒为单位的间隔
格式()
{
a="$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12}"
a="$a ${13} ${14} ${15} ${16} ${17} ${18} ${19} ${20}"
a="${a%%*( )}"; a="${a// /,}"
}
主要的()
{
格式 $@
顶部 -b -n 1 -p $a
[ $# -gt 20 ] && 移位 20 || 转移$#
直到 [ $# -eq 0 ]; 做
格式 $@
顶部 -b -n 1 -p $a | sed '1,/PID/d;/^$/d'
[ $# -gt 20 ] && 移位 20 || 转移$#
完毕
}
如果 [ "$1" == "手表" ]; 然后
转移
shopt -s extglob
主要$@
别的
观看 -t -n $i "$0 观看 $@"
菲