長時間実行されているCGIWebアプリケーションが、タブを途中で閉じることによって強制終了される場合を処理しようとしています。次に、シグナルtrap
がそのイベントをキャッチし、ロックをクリーンアップします。
問題を示す縮小CGIを作成しました。
#!/bin/bash
exec 2>&1
cat <<END
Cache-Control: no-cache
Content-Type: text/html
END
trap "rm -f foo$$.log; exit" 1 2 3 6 9 14 15
while true
do
date | tee -a foo$$.log
echo '<br>'
sleep 5
done
CGIをstraceすると、タブを閉じるとSIGKILLが発生することがわかりますがtrap
、この場合、ログファイルをクリーンアップするためにIIUCが実行されていません。
これは、ApacheのCGIハンドラーがトラップできないを発行しているようなものkill -9
です。親切な人が提案できる回避策やより良いアプローチはありますか?