Perlでシグナルハンドラを指定したいのですが、名前ではなく数字を使用します。これは簡潔な方法で可能ですか?キルとの対称性の欠如は特に際立っています。 、代わりに名前ではなく数字を使ってPerlシグナルハンドラを指定してください。
$SIG{USR2} = \&myhandler;
の例については、私は現時点では私が持っている最高のは、「使用コンフィグ」することである
$SIG{12} = \&myhandler;
を言うと、$ CONFIG {数sig_name}でつつくしたいのですが、上のベースperldoc perlipcのコード。これは冗長であり、不必要に複雑に見えます。
理論的根拠:私は最近2つのケースでこれを望んでいました。
1:私が気にする信号を間違って設定しているバグの親プロセスによって開始されています。すべてをデフォルトにリセットしたいだけです。
foreach my $i (1..32) { $SIG{$i} = 'DEFAULT'; }
2:私は薄い、など-目に見えない-AS-可能ラッパースクリプトを書いている例えばhttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679630目標は何か、シンプルでブルートフォースは次のようになります。私がラッピングしているプログラムがシグナルで終了するなら、同じシグナルで終了したいと思います。しかし、私はいくつかのシグナルを捕捉するので、シグナルハンドラに入る代わりに実際に終了するために、自分自身のシグナルハンドラをクリアする必要があります。あなたは自分の番号を知っている必要はありません、あなただけ一度にすべての信号を設定したい場合は
$ret = system("./other-program");
$SIG{$ret & 127} = 'DEFAULT';
kill $ret & 127, $$;
私は "キー%SIG" 技術の怪しげなよ。合理的に最近のPerl(5.12.4)は、$ Config {sig_name}に行くことをお勧めします。これは、歴史的に、あなたが個人的に設定していなかったシグナルで%SIGを埋め込むことはできませんでした。実際には、Linux上の5.12.4がキーを入力するように見えますが、それはPerlのシステムやバージョン間で移植可能であることは明らかではありません。 –