%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
あ、本当だ。直後になっている・・・
本当は、直後ではなく、直前にする方がよさそうですね。

[上に] [前に] [次に]