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をコンパイルすることがオプションである場合は、それを行うことができます。システムのトップを置き換える必要はありません(またはルート権限が必要です)。ホームディレクトリに置くだけです。
別の回避策として、tmuxまたはscreen複数の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>)
#!/ビン/バッシュ
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 $@"
フィ