3

top多数のプロセスをプロセス名で監視するために使いたい。私はすでに行うことを知ってい$ top -p $(pgrep -d ',' <pattern>)ますがtop、20 pid に制限しています。20 を超える pid を許可する方法はありますか?

同様の結果を得るにはps、 とを組み合わせて使用​​する必要がありますか?watch

4

2 に答える 2

5

から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をコンパイルすることがオプションである場合は、それを行うことができます。システムのトップを置き換える必要はありません(またはルート権限が必要です)。ホームディレクトリに置くだけです。

別の回避策として、tmuxまたはscreen複数のtopインスタンスを使用することがあります。

さらに別の可能な解決策はps、ループを使用することです。

#!/bin/sh

while :; do
    clear
    ps $*
    sleep 1
done

次のように呼び出します。./psloop.sh 42 666

ps追加情報のために、さらにフラグを追加することができます。また、これは毎秒 3 つのバイナリを呼び出すため、効率が悪いことに注意してください。

于 2014-08-14T19:30:07.887 に答える
2

時計付きラッパー。Ubuntu 11.04、Ubuntu 14.04、RHEL5、RHEL6、RHEL7 でテスト済み

構文: script.sh pid [ pid ...] # スペース区切り


例:script.sh $(pgrep -d ' ' <pattern>)


#!/ビン/バッシュ

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 || シフト $#
  終わり
}

if [ "$1" == "時計" ]; それから
  シフト
  shopt -s extglob
  メイン $@
そうしないと
  watch -t -n $i "$0 watch $@"
フィ
于 2014-08-14T23:16:16.310 に答える