मेरे स्क्रिप्ट cdist तैनाती करने और cdist-बड़े पैमाने पर तैनाती (से cdist विन्यास प्रबंधन) सहभागी चला है (यानी एक उपयोगकर्ता द्वारा कहा जाता है)।बाधा पर वर्तमान खोल के सभी बच्चों को कैसे मारना है?
इन लिपियों लिपियों का एक बहुत फोन है, जो फिर से कुछ स्क्रिप्ट फोन:
cdist-mass-deploy ...
cdist-deploy-to ...
cdist-explorer-run-global ...
cdist-dir ....
क्या मैं चाहता हूँ से बाहर निकलें/जैसे ही सभी स्क्रिप्ट को मारने, के रूप में cdist-बड़े पैमाने पर तैनाती या तो नियंत्रण सी द्वारा बंद कर दिया जाता है (SIGINT) या SIGTERM के साथ मारा गया।
cdist तैनाती करने को भी सहभागी कहा जा सकता है और एक ही व्यवहार प्रदर्शित करना चाहिए।
ps -ef का उपयोग करना ... और सह ppid साथ लगता है कि यह काफी unportable हो सकता है सभी प्रक्रियाओं पता लगाने के लिए वेरिएंट। $ का उपयोग करना! गहरे स्तर के रूप में काम नहीं करता है कि बच्चे पृष्ठभूमि प्रक्रिया नहीं हैं।
मैं निम्नलिखित कोड का उपयोग कर की कोशिश की:
__cdist_kill_on_interrupt()
{
__cdist_tmp_removal
kill 0
exit 1
}
trap __cdist_kill_on_interrupt INT TERM
लेकिन इस बदसूरत समाप्त संदेशों के साथ ही गोले में एक segfault (पानी का छींटा, बैश, zsh) की ओर जाता है और तुरंत वैसे भी सब कुछ बंद करने के लिए नहीं लगता है:
# cdist-mass-deploy -p ikq04.ethz.ch ikq05.ethz.ch
core: Waiting for cdist-deploy-to jobs to finish
^CTerminated
Terminated
Terminated
Terminated
Segmentation fault
तो सवाल, कैसे सफाई से सभी (उप) बच्चों एक पोर्टेबल ढंग से (बॉर्न शैल, कोई csh समर्थन की जरूरत) सहित बाहर निकलने के लिए किया जाता है?
+1। लेकिन मैं infanticide पर चर्चा के बारे में थोड़ा चिंतित हूँ। – Hyperboreus