Perl'de bir sinyal işleyici belirtmek istiyorum, ancak ismi kullanarak değil, numarayı kullanmak istiyorum. Bu mümkün bir şekilde mümkün mü? Özellikle öldürmeyle birlikte simetri yokluğu söner. YerineNumarayı kullanarak Perl sinyal işleyicisini belirtin, isim değil,
$SIG{USR2} = \&myhandler;
Örneğin şu anda ben en iyisi "kullanmak Yapılandırma" etmektir
$SIG{12} = \&myhandler;
demek ve $ Config'de {sig_name} burnunuzu sokacak istiyorum dayalı perldoc perlipc'deki kod. Bu ayrıntılı ve gereksiz karmaşık görünüyor.
Rasyonel: Son zamanlarda iki durumda bunu istemiştim.
1: Göz ardı etmekle ilgilendiğim sinyalleri hatalı bir şekilde ayarlayan buggy ebeveyn işlemiyle başlatıldım ve her şeyi varsayılan olarak sıfırlamak istiyorum.
foreach my $i (1..32) { $SIG{$i} = 'DEFAULT'; }
2: Ben ince, as-görünmez-as-olası sarıcı komut dosyası yazıyorum mesela http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679630 gol şey basit ve kaba kuvvet gibi olurdu. Eğer paketlediğim program bir sinyal ile çıkarsa, aynı sinyal ile çıkmak istiyorum. Ancak, birkaç sinyal yakaladım, bu yüzden sinyal işleyicime girmek yerine aslında çıkmam için kendi sinyal işleyicimi temizlemem gerekiyor. Onların sayıları bilmek gerekmez, sadece bir kerede tüm sinyalleri ayarlamak isterseniz
$ret = system("./other-program");
$SIG{$ret & 127} = 'DEFAULT';
kill $ret & 127, $$;
ben "tuşlarına% SIG" tekniğinin şüpheli. Makul bir Perl (5.12.4) $ Config {sig_name} 'a gitmenizi tavsiye ediyor ve bunun, tarihsel olarak Perl'e kişisel olarak ayarladığınız sinyalleri kullanarak% SIG'i yerleştirmeye güvenemeyeceğinize inanıyorum. Pratikte, Linux'taki 5.12.4'ün anahtarları doldurduğu görülüyor, ancak bunun, Perl sistemlerinde veya sürümlerinde taşınabilir olduğu net değil. –