「ps」または「サービスステータス(Linuxの場合)」を使用してプロセスステータスを定期的にチェックするスクリプト、またはフォークしてプロセスを待機するC / C ++で監視プログラムを見てきました...
bash を trap で使用して、SIGCLD が受信されたときにサブプロセスを再起動することは可能でしょうか?
次のアイデアでRedHat Linuxで基本的なスイートをテストしました(そして確かに機能しませんでした...)
#!/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
開始されたbashスクリプトは、数秒間スリープして、今のところ終了します。
いくつかの問題が観察されました:
- シェルがフォアグラウンドで起動すると、SIGCHLD は 1 回だけ処理されます。シグナル()のようなリセットシグナル処理をトラップしますか?
- スクリプトとその子は SIGINT の影響を受けないようです。つまり、^C で停止することはできません。
- 閉じることができないので、端末を閉じました。台本はHUPらしく、ゾンビの子がたくさん出てきました。
- バックグラウンドで実行すると、スクリプトにより端末が停止しました
...とにかく、これはまったく機能しません。私はこのトピックについてほとんど知らないと言わざるを得ません。誰かがいくつかの実例を提案または提供できますか? そのような使用のためのスクリプトはありますか?
では、bashでwaitを使用するのはどうですか?
ありがとう