मैं इस के साथ आश्चर्यचकित था टिप्पणी अन्य सवाल में:
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
आपके द्वारा वर्णित प्रभाव को पुन : पेश करने के लिए।