Perlでシグナルハンドラーを指定したいのですが、名前ではなく番号を使用しています。これは簡潔な方法で可能ですか?キルとの対称性の欠如は特に際立っています。たとえば、代わりに
$SIG{USR2} = \&myhandler;
言いたいのですが
$SIG{12} = \&myhandler;
私が現時点で持っている最善の方法は、perldoc perlipcのコードに基づいて、「Configを使用」して$Config{sig_name}を調べてみることです。これは冗長で、不必要に複雑に見えます。
理論的根拠:最近、2つのケースでこれが必要になりました。
1:無視したい信号を誤って設定するバグのある親プロセスによって開始されており、すべてをデフォルトにリセットしたいだけです。例: http: //bugs.debian.org/cgi-bin/bugreport.cgi?bug = 679630 目標は、次のような単純でブルートフォースです。
foreach my $i (1..32) { $SIG{$i} = 'DEFAULT'; }
2:私は薄い、可能な限り見えないラッパースクリプトを書いています。ラッピングしているプログラムがシグナルで終了する場合、同じシグナルで終了したいと思います。ただし、いくつかのシグナルをキャプチャするため、シグナルハンドラーに入るのではなく、実際に終了するように、自分のシグナルハンドラーをクリアする必要があります。私の目標は、次のような簡単な説明を書くことです。
$ret = system("./other-program");
$SIG{$ret & 127} = 'DEFAULT';
kill $ret & 127, $$;