超过20条命令的Linux Top命令

我想要使​​用top来监视进程名称的大量进程。 我已经知道做$ top -p $(pgrep -d ',' <pattern>)但是top只限制了20个pid。 有没有办法让20多个pid?

我是否必须使用pswatch的组合来获得类似的结果?

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中。

另一个解决方法可能是使用tmuxscreen和多个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>)


 #!/斌/庆典

我= 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 // /,}”
 }

主要()
 {
  格式$ @
   top -b -n 1 -p $ a
   [$#-gt 20] && shift 20 || 班$#

  直到[$#-eq 0]; 做
    格式$ @
     top -b -n 1 -p $ a |  sed'1,/ PID / d; / ^ $ / d'
     [$#-gt 20] && shift 20 || 班$#
   DONE
 }

如果[“$ 1”==“watch”]; 然后
  转移
   shopt -s extglob
  主要$ @
其他
  看-t -n $ i“$ 0 watch $ @”
科幻