Neler oluyor burada? SIGINT'in ön plan süreç grubuna gönderileceğini düşündüm. SIGINT neden burada yakalanmıyor?
(Sanırım, belki, o sistem() alt süreç için yeni bir süreç grubu oluşturuyor bir kabuk? Herkes? Bu teyit edebilir çalıştıran)% perl
local $SIG{INT} = sub { print "caught signal\n"; };
system('sleep', '10');
Sonra ctrl sonra + d ctrl isabet + c hemen ve "yakalanan sinyalin" hiçbir zaman basılmadığını fark edin. Böyle hissediyorum
zaten bu geçici bir çözüm için ... basit bir şeydir? Sorun tüm yineleme tamamlanana kadar ctrl + c tutan sistem sonuçları yoluyla komutların bir demet çalıştırırken ... (perl SIGINT çünkü geçmez) ve oldukça rahatsız edici
Bu nasıl çalışılan bu? (Zaten doğrudan) (çatal kullanılarak test ve ... Bu şu anda kabul edilebilir bir çözüm değildir çalıştığını anlamak)GÜNCELLEME: Bu "uyku" ile ilgisi ilgisi sahiptir lütfen unutmayın, sadece komutun, etrafındaki perlinkinden önemli ölçüde daha fazla olan, koşmak için uzun süreler uzun süren bir zaman alması gerçeği. Öyle ki, ctrl + c tuşlarına basılması (ön plan işlem grubunda olduğu gibi) komuta gönderilir ve bir şekilde asla perl'e gönderilmez.
metheler Dokümanları tekrar tekrar okuman gerek: -/Teşekkürler. – dlamotte
Çocuğun geri dönüş değerini incelemeniz gerekmesinin sebebi, kabuğunuzun, tüm süreç grubuna (c) ve/veya çocuklara (cc) ve çocuklara, bu durumda çocuğunuzu 'uykuyu (10') sona erdirmesidir. Eğer başka bir kabuktan -INT $ perl_pid'i öldürürseniz, perl SIG_IGNore sizi mutlu edecektir. – pilcrow