क्या कोई सबप्रोसेस का आह्वान करने का कोई तरीका है ताकि यह और उसके सभी वंशजों को एक बाधा भेजी जा सके, जैसे कि आप Ctrl-C अग्रभूमि कार्य करते हैं? मैं एक लॉन्चर स्क्रिप्ट को मारने की कोशिश कर रहा हूं जो लंबे समय से चलने वाले बच्चे को आमंत्रित करता है। मैंने kill -SIGINT $child
(जो इसके वंशजों को बाधा नहीं भेजता है, इसलिए नो-ऑप है) और kill -SIGINT -$child
(जो काम करता है जब इंटरैक्टिव रूप से बुलाया जाता है लेकिन स्क्रिप्ट में नहीं चल रहा है)।बैश स्क्रिप्ट एक पृष्ठभूमि कार्य में Ctrl-C के बराबर कैसे कर सकता है?
यहां एक टेस्ट स्क्रिप्ट है। लंबी चल रही स्क्रिप्ट test.sh --child
है। जब आप test.sh --parent
पर कॉल करते हैं, तो यह test.sh --child &
को आमंत्रित करता है और फिर इसे मारने का प्रयास करता है। मैं माता-पिता को सफलतापूर्वक बच्चे को कैसे मार सकता हूं?
#!/bin/bash
if [ "$1" = "--child" ]; then
sleep 1000
elif [ "$1" = "--parent" ]; then
"$0" --child &
for child in $(jobs -p); do
echo kill -SIGINT "-$child" && kill -SIGINT "-$child"
done
wait $(jobs -p)
else
echo "Must be invoked with --child or --parent."
fi
मुझे पता है तुम, trap
संकेतों को लंबे समय से चल बच्चे को संशोधित कर सकते हैं कि उन्हें अपने उपप्रक्रिया को भेजें, और उसके बाद ( Bash script kill background (grand)children on Ctrl+C से) इंतजार है, लेकिन वहाँ बच्चे स्क्रिप्ट को संशोधित किए बिना किसी भी तरह से है?
अद्यतन उत्तर। – user000001