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 $@" フィ