私は定期的に 'ps'や 'service status(Linux上)'を使ってプロセスステータスをチェックするスクリプトや、フォークしてプロセスを待つC/C++の監視プログラムを見たことがあります...トラップSIGCHLDを使用したbash restartサブプロセス?
I SIGCLDが受信したときにbashをトラップとともに使用してサブプロセスを再起動することが可能かどうか疑問に思いますか?
私が開始されたbashスクリプトは、ほんの数秒のための出口のために眠る何
(...と、確かにそれは動作しませんでした)、次のアイデアを#!/bin/bash
set -o monitor # can someone explain this? discussion on Internet say this is needed
trap startProcess SIGCHLD
startProcess() {
/path/to/another/bash/script.sh & # the one to restart
while [ 1 ]
do
sleep 60
done
}
startProcess
をRedHatのLinux上での基本的なスイートをテストしています今。観察
いくつかの問題:シェルがフォアグラウンドで起動したとき
- 、SIGCHLDは一度だけ処理されます。 signal()のようなリセット信号処理をトラップしますか?
- スクリプトとその子は、SIGINTから免除されているように見えます。つまり、それらを停止できないことを意味します。^ C
- 私は端末を閉じていません。スクリプトはHUPで、多くのゾンビの子供たちが残っているようです。
- バックグラウンドで実行すると、スクリプトはとにかく、これがすべてでは動作しません...
を死ぬように端末を引き起こしました。私はこの話題についてあまり知りません。 誰かが提案したり、いくつかの実例を挙げることはできますか? このような使用のためのスクリプトはありますか?
bashでの使用待ちはどうですか?
おかげ
あなたの共有のためにジミーに感謝し、ひどいスクリプトをテストしました。私は試みを止め、伝統的な方法でそれをやりました。しかし、私は "待機"を試しました、それは本当に基本的なシナリオでは非常にうまくいきます。 [$ {thepid} -ne場合SIGINT SIGTERM STOPNOW = 1 ! - '#/ binに/ bashの thepid = 0 STOPNOW = 0 セットは トラップクリーンアップSIGINTをSIGTERM クリーンアップ(){ トラップを監視-o 0]、その後 は が ./trial.sh& thepid = $を開始エコーん ] [$ {STOPNOW} -ne 1一方、$ {thepid} キル$ {thepid} Fiの } を殺すエコー! echo "$ {thepid}を待っています" 待ちます$ {thepid} done exit 0 ' –