को अनदेखा करें और अनदेखा करें क्या एसआईजीआईएनटी को रोकने, कुछ करने के लिए बाश में संभव है, और फिर इसे अनदेखा करें (बैश चलाना जारी रखें)।बैश में सिगिनट को पकड़ें,
मुझे पता है कि मैं
trap '' SIGINT
साथ SIGINT अनदेखा कर सकते हैं और मैं भी
trap handler SIGINT
साथ SIGINT पर कुछ कर सकते हैं लेकिन यह अभी भी handler
कार्यान्वित के बाद स्क्रिप्ट बंद हो जाएगा। जैसे
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
जब मैं Ctrl + C दबाएं, कार्यक्रम के लिए SIGINT भेजा जाएगा, लेकिन पार्टी wait
से पहले कार्यक्रम ठीक से बंद हो गया था और उसके संकेत हैंडलर में इसके उत्पादन के लिए बनाया छोड़ देगा।
का उपयोग @suspectus जवाब मैं बदल सकते हैं wait $PID
रहे हैं:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
यह वास्तव में मेरे लिए काम करता मैं सिर्फ 100% यकीन है कि अगर यह 'स्वच्छ' या 'गंदा वैकल्पिक हल' है हूँ।
यह इसे कई बार क्यों प्रिंट करेगा? – cnicutar
@cnicutar: अगर मैं ctrl + c कई बार दबाता हूं (जो कि मैं वर्तमान रूप में नहीं कर सकता, क्योंकि यह पहले के बाद बंद हो जाता है) – Zulan
मैंने अपना उदाहरण वास्तविक उपयोग केस के करीब होने के लिए बदल दिया है। – Zulan