初歩から始める初心者向けPerl-CGI講座 ■
|
| トップページ | CGI設置 | CGI作成 | 作成事例 | 設置用語 | 作成用語 | 関数リファレンス | FAQ | お問合せ | |
|
|
alarm |
alarm は実行中のスクリプト自身に対して、指定秒数後にシグナル SIGALARM を送ります。
送信されるシグナルとは実行中のスクリプトに割り込んで信号を伝えるもので、例えば
Linux
でpingをした時、送信回数を指定しないと ping を送り続けますが Ctrl + C を押すと
SIGINT
シグナルが送られ、プロセスはシグナルを受け取って終了させるなどの処理をします。
alarm は SIGALARM シグナルを指定秒数後に送るもので、長時間動作するかもしれない
プロセスを経過時間によって強制終了するのに利用できます。
書式例 (alarmのセットと解除) |
alarm ☆ |
☆ シグナル送信までの秒数を指定する
|
☆ を 0にするとセットしたタイマーをキャンセルする事ができます。
指定時間になるとプロセスは強制終了します。
|
書式例 (alarmシグナルの受け取り) |
$SIG{'ALARM'} = サブルーチンなど |
上のようにすると、シグナルを受け取った時、強制終了する前に
何らかの処理をさせる事ができます。
上記のようにサブルーチンを指定すると、シグナルを受け取った際に
サブルーチンを実行する事ができます。
例えばファイルのロック処理などの場合、ロックを解除したり、下の
サンプルソースでは 文字列を表示させています。 |
alarm は受け取ると、その時点で処理を強制終了します。
例えば下の例では for で無限ループとなっていますので、永遠に A という文字列が
表示され続けるはずですが、 alarm (1) としていますので開始から1秒後に強制終了
します。
下のようにするとシグナルを受け取った場合、強制終了する前に何らかの処理をする
事ができ、サンプルソースでは 処理がタイムアウトしました という文字列を表示しています。
上の処理では無限ループなので alarm を解除する必要はありませんが、実際に使う場合
は正常に処理できたら alarm (0) として解除しないと、正常に処理できた場合にもシグナル
が一定時間後に発生してしまうなどの不具合となります。
alarm で終了する処理を加える場合は必ず、正常動作した場合に alarm を解除する処理を
加えて下さい。
|
|
|
|
|
Beginner's CGI - Copyright (C) 2003 aimix. All Rights Reserved - |