%SIGって何?
[上に]
[前に]
[次に]
gradius
2000/05/20(土) 00:16:37
とほほさんの wwwcount.cgi
の 216,217 行目にある
sub sigexit { rmdir($file_lock); exit(0); }
$SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit";
というのはどういう意味なのですか?
途中で終了してもロックファイルが残らない
ようにするための処理ということは
コメントからわかるのですが…
sigexit が &sigexit で呼ばれていないのですが
それでも実行されることがあるんでしょうか?
かの
2000/05/21(日) 11:54:46
http://www.tohoho-web.com/wwwperl3.htm#Signal
強制終了時の処理みたいですよ
gradius
2000/05/22(月) 01:58:02
スクリプト中のどこに記述してもかまわないんでしょうか?
また、PIPE とか INT とか HUP とか QUIT とか TERM
ってなんでしょうか?
とほほ
2000/05/22(月) 02:39:06
> クリプト中のどこに記述してもかまわないんでしょうか?
基本的にどこに記述してもかまいませんが、この行が実行された時点で、
「強制終了時のsigexit呼び出し」が有効になります。
> PIPE とか INT とか HUP とか QUIT とか TERMってなんでしょうか?
シグナルの名前で、以下のような意味を持ちます。
SIGPIPE:相手との通信が途絶えた時
SIGINT:割り込み(INTRUPPT)命令が発行された時
SIGHUP:中止(HANG UP)命令が発行された時
SIGQUIT:終了(QUIT)命令が発行された時
SIGTERM:停止(TERMINATE)命令が発行された時
Apacheなどは、ブラウザとの通信が途絶えた時には、SIGTERMで
CGIスクリプトを強制終了させているみたいですね。
gradius
2000/05/22(月) 13:47:18
とほほさんありがとうございます。
で、まだ疑問があるのですが、perl が
この 2 行を見つける前に強制終了してしまっても
この 2 行は実行されるんでしょうか?
いくらなんでもこの行を perl が知らない限り実行できない
と思うんですが…
なにか勘違いしているでしょうか?
とほほ
2000/05/23(火) 00:17:07
すみません。「どこに記述してもかまわない」の表現が悩ませてしまいましたね。
構文上はどこに記述しても構いませんが、ロジック的には、強制終了時の処理が
必要となる個所よりも、前に実行される場所に記述してください。
gradius
2000/05/23(火) 00:57:21
> ロジック的には、強制終了時の処理が
> 必要となる個所よりも、前に実行される場所に記述してください。
なるほど、だから wwwcount.cgi は
ロックをした直後にこの 2 行を記述しているわけですね?
とほほ
2000/05/24(水) 23:58:02
あ、本当だ。直後になっている・・・
本当は、直後ではなく、直前にする方がよさそうですね。
[上に]
[前に]
[次に]