
偶然このリンクを見つけました:特定の文字列が観察されるまでコマンドの出力を「監視」し、その後終了します。
プロセスの PID はわかっています。top を使用してプロセス「リソース消費」をログに記録します。
基本的にtop -p PID -b >> LOGFILE
。
「watch」コマンドを使用して、これを5秒ごとに実行したい
watch -n 5
独立した外部プログラムから、ログファイルに「We Are Finished」を追加します。
「終了しました」のときに、watch/top のログ記録を中断/終了するようにしたいのでgrep
、現在の値だけでなく、ログ ファイル全体を評価する必要があります。
コマンドを非ブロッキング形式で実行したいのですが、おそらく「&
」で終わります。
-d を 5 に設定して、top と watch が同時に作成されるようにしましたか? ...
上記のリンクから提案された「-e」オプションを使用した私の試みは、期待どおりに動作しませんでした... PID と LOGFILE は適切な値です。
watch -n 5 -e "! top -d 5 -b -p PID >> LOGFILE | grep -m 1 \"We Are Finished\"" &
答え1
until grep -qm 1 '\"We Are Finished\"' LOGFILE; do top -d 5 -n 12 -b -p PID >> LOGFILE; done
pid が実行されなくなったときにプロセスのログ記録を終了したい場合は、以下のスクリプトが機能しますか? (これにより、2 つのプロセスが同じファイルに書き込むことが回避されます)
3 つのパラメータ(PID、LOGFILE の場所、ログ エントリ間の時間)が必要です。
#!/bin/bash
if [ $# -lt 3 ]
then
echo "Usage logpid (PID) (LOGFILE) (Time between in sec)"
exit 1;
fi
while :
do
if ps -p $1 > /dev/null ; then
top -n 1 -b -p $1 >> $2;
else
echo "Exited No pid";
break;
fi
sleep $3;
done