यहां एक साधारण प्रोग्राम है जो दो trap
हैंडलर पंजीकृत करता है और फिर उन्हें trap -p
के साथ प्रदर्शित करता है। फिर यह वही काम करता है, लेकिन एक बच्चे की पृष्ठभूमि प्रक्रिया में।बैश: मैं पृष्ठभूमि खोल में SIGINT के लिए जाल क्यों नहीं लगा सकता?
पृष्ठभूमि प्रक्रिया SIGINT
जाल को अनदेखा क्यों करती है?
#!/bin/bash
echo "Traps on startup:"
trap -p
echo ""
trap 'echo "Received INT"' INT
trap 'echo "Received TERM"' TERM
echo "Traps set on parent:"
trap -p
echo ""
(
echo "Child traps on startup:"
trap -p
echo ""
trap 'echo "Child received INT"' INT
trap 'echo "Child received TERM"' TERM
echo "Traps set on child:"
trap -p
echo ""
) &
child_pid=$!
wait $child_pid
आउटपुट:
$ ./show-traps.sh
Traps on startup:
Traps set on parent:
trap -- 'echo "Received INT"' SIGINT
trap -- 'echo "Received TERM"' SIGTERM
Child traps on startup:
Traps set on child:
trap -- 'echo "Child received TERM"' SIGTERM
क्या आप 'set -m' पर थोड़ा सा विस्तार कर सकते हैं - यह क्या है और यह कैसे किया जा सकता है? मैं एक कामकाज की तलाश में हूं जिसके द्वारा मैं एक बीजी प्रक्रिया में सिगिनट भेज सकता हूं। धन्यवाद। – drevicko
@revicko मैनपेज में 'मॉनिटर' के लिए खोजें। मॉनिटर मोड ('set -m') अलग-अलग प्रक्रिया समूहों में चलाने के लिए कमांड (पाइपलाइन) का कारण बनता है। आप शायद यह नहीं चाहते हैं। हालांकि, अगर आप पृष्ठभूमि प्रक्रिया में निष्पादन योग्य चल रहे हैं, तो इसे एक रैपर के माध्यम से लॉन्च करना मुश्किल है जो SIGINT को अनदेखा कर देगा (कुछ और किए बिना)। (यदि आपको नहीं पता कि यह कैसे करना है, तो खोज करें, और मैं कोड पोस्ट करूंगा।) – PSkocik
बहुत धन्यवाद! सवाल यह है [यहां] (https://stackoverflow.com/questions/49178556/how-do-i-launch-a-background-process-through-a-wrapper-thatll-undo-the-sigint-i)। – drevicko