作成したスクリプトに問題があります。スクリプトをデーモンのように実行したいので、シグナルを使用するのはこれが初めてです。そのため、いくつかのシグナル Handler を設定して、スクリプトを適切に終了させます。
local $SIG{HUP} = \&StopSuperviser;
local $SIG{INT} = \&StopSuperviser;
local $SIG{QUIT} = \&StopSuperviser;
local $SIG{ILL} = \&StopSuperviser;
local $SIG{ABRT} = \&StopSuperviser;
local $SIG{TERM} = \&StopSuperviser;
これは正常に動作していますが、これらの信号の 1 つ (Crt-C、kill -15、kill -1 ...) をスクリプトに送信すると、StopSuperviser 関数は正しく呼び出されますが、スクリプトの出力で常に次のエラーが表示されます。
グローバル破棄中の null 操作で、引数 "HUP" が数値ではありません。
Google で検索しましたが、この動作を扱っているものは見つかりませんでした。
誰かがこれに光を当てることができますか?
どうもありがとうございました。
よろしくお願いします
フロラン
#返信ありがとうございます。StopSuperviser 関数は次のとおりです。
sub StopSuperviser
{
print "On quite\n";
$StopAlarm = 1;
&DeleteThreadOrder($AllProcess);
foreach my $Subprocess (@$AllProcess) {
foreach my $thread (@{$Subprocess->{Thread}}) {
$thread->kill('USR1');
$thread->join();
}
}
exit;
}
次のパッケージも使用します。
use Alarm::Concurrent;
これは知っておくことが重要かもしれませんし、そうでないかもしれません:) この助けを願っています:)
あなたの応答と助けに再び感謝します
よろしくお願いします
フロラン