मैं इस के साथ आश्चर्यचकित था टिप्पणी अन्य सवाल में:
USR1 सिग्नल को जल्द ही शुरू करने के बाद dd भेजना (यानी एक bash स्क्रिप्ट में, आपके शुरू करने के बाद की लाइन) वास्तव में इसे समाप्त कर देगा
क्या कोई समझा सकता है क्यों ?
मैं इस के साथ आश्चर्यचकित था टिप्पणी अन्य सवाल में:
USR1 सिग्नल को जल्द ही शुरू करने के बाद dd भेजना (यानी एक bash स्क्रिप्ट में, आपके शुरू करने के बाद की लाइन) वास्तव में इसे समाप्त कर देगा
क्या कोई समझा सकता है क्यों ?
जवाबों:
प्रत्येक सिग्नल में एक "डिफॉल्ट डिस्पोज़ल" होता है - जब वह सिग्नल प्राप्त करता है तो एक प्रक्रिया डिफ़ॉल्ट रूप से क्या करती है। 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सिग्नल को इंटरसेप्ट करने के लिए एक हैंडलर रजिस्टर करता है और इसके साथ कुछ उपयोगी काम करता है, लेकिन अगर आप बहुत जल्दी सिग्नल देते हैं तो उस हैंडलर को रजिस्टर करने का समय नहीं है, इसलिए इसके बजाय डिफ़ॉल्ट कार्रवाई होती है
straceएक शेल स्क्रिप्ट में आउटपुट को कैप्चर करना और पार्स करना जैसे कुछ अजीबोगरीब ...)
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobsआपके द्वारा वर्णित प्रभाव को पुन : पेश करने के लिए।