A: 開いているソケットを保持するプログラム B: サービスとして実行されているウォッチドッグ スクリプト:
while true
do
if [ -z "`pidofproc $1`" ]; then
$1;
chrt -f -p 40 `pidofproc $1`
sleep 8
fi;
sleep 2
done
サービスが開始されたとき - サービスが停止したときにウォッチドッグが開始さ
れました - ウォッチドッグとプログラムが強制終了されます (killall)。
現在、プログラムは自分自身をアップグレードしたいので、呼び出しますsystem( "upgrade.sh" );
upgrade.sh:
/sbin/service watchdog stop
.... install upgrade .....
exec /sbin/service watchdog start &
アップグレードは正常に実行されましたが、プログラムの起動時に - ソケットを開けません (既に使用されています) - このエラーで - プログラムは終了します (ウォッチドッグによって再起動されます)。
lsof -i は、ポート上の 3 つのプログラムを表示します。
watchdog
program
sleep
プログラムとスリープ pid は常に変更されます (つまり、終了/再起動動作)
ウォッチドッグ pid パーシスタント。
を に置き換えてみましsystem(...)
た
if(!fork()) exec(...)
、しかし同じ問題が残っています。