我想使用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中。
另一种解决方法可能是使用tmux
orscreen
和多个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 观看 $@" 菲