watchコマンドは、スクリプトのみを実行したときとは異なるps結果を表示します。

watchコマンドは、スクリプトのみを実行したときとは異なるps結果を表示します。

これは私のスクリプトです。

$ cat count_tomcat.sh 
ps -ef | grep tomcat| wc -l
$ ./count_tomcat.sh 
2

これwatchでコマンドを使用すると、他の結果が表示されます。

$ watch ./count_tomcat.sh


Every 2.0s: ./count_tomcat.sh                                                                                                                                                                                Fri Oct 15 16:50:43 2021

5

ベストアンサー1

速く走る:

watch -x pgrep -c -f tomcat

定期的にコマンドラインにインクルードをインポートしますtomcat

または

watch -x pgrep -c -x tomcat

ps -e名前によるプロセスに関する情報(コマンドラインではない、wrt出力のようにps -efはいスコー洋。

または:

watch -x pgrep -c -u tomcat

ユーザーとして実行されるプロセスの数(一致する出力列がtomcatわからないため)。ps -ef

の場合、-x少なくともprocps-ng実装のためにwatchシェル実行をスキップし、代わりにコマンドを直接実行します。

pgrep -f tomcat(コマンドラインに含まれていても)それ自体は報告しませんが、コマンドを計算してtomcatコマンドに追加しません。これは、実装が最後のコマンドの分岐を最適化しない場合にコマンドラインを解析するために呼び出すことができます。 。watch-xwatchsh -c 'pgrep -f tomcat'watchsh

watch -x pgrep -cf '[t]omcat'

[t]omcatパターン自体が一致しないため、この状況を回避できます。

(そうでない場合は、-x次のようにする必要があります。

watch 'pgrep -cf "[t]omcat"'

同様にシェルはワイルドカードなので、シェルと[x]実行中のシェルの両方でwatchエスケープする必要があります。)

vi tomcat.confもちろん、実行中のプロセスやatomcatalog。コマンドラインベースの一致プロセスは非常に脆弱です。pgrepより多くのオプションを追加して、フィルタを具体化し、誤ったプロセスを識別するリスクを制限することができます。

最新のLinuxシステムでは、制御グループに依存するか、その情報を照会できる必要がありますsystemdtomcatサービスとして正しく設定されている場合)。

おすすめ記事