SIGUSR1 प्रक्रिया को समाप्त करने का कारण क्यों बनता है?


20

मैं इस के साथ आश्चर्यचकित था टिप्पणी अन्य सवाल में:

USR1 सिग्नल को जल्द ही शुरू करने के बाद dd भेजना (यानी एक bash स्क्रिप्ट में, आपके शुरू करने के बाद की लाइन) वास्तव में इसे समाप्त कर देगा

क्या कोई समझा सकता है क्यों ?


आपके प्रश्न का इतना जवाब नहीं है, लेकिन इस एक-लाइनर का प्रयास करें: { dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobsआपके द्वारा वर्णित प्रभाव को पुन : पेश करने के लिए।
जिप्पी १३'१२

जवाबों:


38

प्रत्येक सिग्नल में एक "डिफॉल्ट डिस्पोज़ल" होता है - जब वह सिग्नल प्राप्त करता है तो एक प्रक्रिया डिफ़ॉल्ट रूप से क्या करती है। signal(7)उन्हें सूचीबद्ध करने वाले मैन पेज में एक तालिका है :

Signal     Value     Action   Comment
──────────────────────────────────────────────────────────────────────
...
SIGUSR1   30,10,16    Term    User-defined signal 1
SIGUSR2   31,12,17    Term    User-defined signal 2

SIGUSR1और SIGUSR2दोनों के पास डिफ़ॉल्ट कार्रवाई है Term- प्रक्रिया समाप्त हो गई है। ddसिग्नल को इंटरसेप्ट करने के लिए एक हैंडलर रजिस्टर करता है और इसके साथ कुछ उपयोगी काम करता है, लेकिन अगर आप बहुत जल्दी सिग्नल देते हैं तो उस हैंडलर को रजिस्टर करने का समय नहीं है, इसलिए इसके बजाय डिफ़ॉल्ट कार्रवाई होती है


1
काश मैं इस अस्पष्टता के बारे में जागरूक होने के लिए दो बार उत्थान कर पाता। एक स्पष्ट सिग्नल हैंडलर को हटाने के बाद प्रक्रियाओं को बेतरतीब ढंग से मरते हुए देख रहा था।
डेकोन्डेस्पेरादो

1
क्या समय की उचित मात्रा (~ 0.5-1 सेकंड) के लिए सोने के बजाय इस दौड़ की स्थिति को नियंत्रित करने का कोई व्यावहारिक तरीका है? (मेरा मतलब है, straceएक शेल स्क्रिप्ट में आउटपुट को कैप्चर करना और पार्स करना जैसे कुछ अजीबोगरीब ...)
एड्रियन गुंटर

मेरे पास एक शेल स्क्रिप्ट थी जो ठीक काम कर रही थी। लेकिन अचानक संभावना के कारण काम करना बंद कर दें !: मुझे अब बंद कर दिया गया था। उप-प्रेषण किल -s SIGUSR1 $ PARENT_PID को भेजना अब बहुत तेज़ हो गया है ?. भव्य माता-पिता को लगता है कि माता-पिता को सामान्य रूप से समाप्त कर दिया गया है, लेकिन माता-पिता अभी भी लूप को निष्पादित कर रहे हैं। यह एक अच्छी पोस्टिंग है। मैं दिन के अधिकांश समय यह पता लगाने की कोशिश कर रहा है।
केमिन झोउ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.