में स्पष्ट रूप से ट्रैपिंग सिग्नल मेरे पास एक साधारण पर्ल स्क्रिप्ट है जो बस टेक्स्ट की एक पंक्ति को stdout पर प्रिंट करती है। जो मैं पूरा करना चाहता हूं वह यह है कि जब यह स्क्रिप्ट चलती है, तो अगर मैं (या कोई और) उस प्रक्रिया को रोकने के लिए एक संकेत जारी करता है, तो मैं चाहता हूं कि वह उस सिग्नल को फंसाने और साफ से बाहर निकलने के लिए तैयार करे। कोड मैं निम्नलिखितपर्ल
#!/usr/bin/perl -w
$| = 1;
use sigtrap 'handler' => \&sigtrap, 'HUP', 'INT','ABRT','QUIT','TERM';
while(1){
print "Working...\n";
sleep(2);
}
sub sigtrap(){
print "Caught a signal\n";
exit(1);
}
तरह लग रहा है यह अच्छी तरह से काम करता है जब मैं वास्तव में कमांड लाइन से Ctrl-C मारा, अगर मैं एक
kill -9 <pid>
यह सिर्फ मर जाता है जारी करते हैं। बाहर निकलने से पहले मैं इसे निष्पादित करने के लिए कैसे प्राप्त करूं? मेरा सामान्य विचार इस ढांचे को कैप्चर करने या विफलता के लिए सर्वर रीबूट के कारण सर्वर पर मरने पर कैप्चर करने के लिए उपयोग करना है।
धन्यवाद ज्यादा अग्रिम
'Ctrl-C' दबाकर 'INT' सिग्नल ** ** ** TERM' नहीं भेजता है, हालांकि एक इंटरैक्टिव प्रक्रिया के लिए डिफ़ॉल्ट कार्रवाई। 'Kill -9' के विपरीत, सिग्नल पकड़ा जा सकता है। एक 'kill -l' सिग्नल नाम सूचीबद्ध करेगा। एक 'stty -a' 'INT' के डिफ़ॉल्ट मैपिंग को 'Ctrl-C' में दिखाएगा। – JRFerguson
ओच! गलतफहमी के लिए इसे साफ़ करने और क्षमा करने के लिए धन्यवाद। –