प्रसंग:
उपयोगकर्ता मुझे चलाने के लिए अपनी कस्टम स्क्रिप्ट प्रदान करते हैं। ये स्क्रिप्ट कई तरह के हो सकते हैं जैसे कई GUI प्रोग्राम शुरू करने के लिए स्क्रिप्ट, बैकएंड सेवाएं। लिपियों को कैसे लिखा जाता है, इस पर मेरा कोई नियंत्रण नहीं है। ये स्क्रिप्ट ब्लॉकिंग प्रकार की हो सकती हैं अर्थात निष्पादन सभी बच्चे की प्रक्रियाओं (क्रमिक रूप से चलने वाले प्रोग्राम) से बाहर निकलने तक प्रतीक्षा करता है
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
या नॉन ब्लॉकिंग टाइप यानी बैकग्राउंड में बच्चे की प्रक्रिया को कांटे और कुछ से बाहर निकलें
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
मैं क्या हासिल करने की कोशिश कर रहा हूं?
उपयोगकर्ता प्रदान की गई लिपियाँ उपरोक्त दोनों प्रकारों में से किसी एक या दोनों के मिश्रण की हो सकती हैं। मेरा काम स्क्रिप्ट को चलाना है और तब तक इंतजार करना है जब तक कि सभी प्रक्रियाएं उसके द्वारा शुरू न हो जाएं और फिर नोड को बंद कर दें। यदि इसका अवरोधन प्रकार है, तो मामला सरल है अर्थात स्क्रिप्ट निष्पादन प्रक्रिया की PID प्राप्त करें और ps -ef तक प्रतीक्षा करें | grep -ef PID में अधिक प्रविष्टियाँ नहीं हैं। गैर-अवरुद्ध स्क्रिप्ट मुझे परेशानी दे रही है
क्या कोई ऐसा तरीका है जिससे मैं स्क्रिप्ट के निष्पादन द्वारा पैदा की गई सभी बाल प्रक्रिया के पीआईडी की सूची प्राप्त कर सकता हूं? किसी भी संकेत या संकेत अत्यधिक सराहना की जाएगी
grep
, बस ps –udummy_user
। इसके अलावा, प्रक्रिया समूहों को देखें।
ps
बिना किसी तर्क (केवल bash
और ps
शुरुआत में) का उपयोग करके इस शेल से उत्पन्न सभी प्रक्रियाओं को सूचीबद्ध कर सकते हैं । वहां अपनी स्क्रिप्ट शुरू करें। इसके समाप्त होने के बाद, ps | wc -l
अपने अपेक्षित मूल्य तक पहुंचने तक प्रतीक्षा करें ।
pid$(foo.sh; echo $!)
पीआईडी मिल जाएगी । क्या वह काम करेगा?foo.sh
ps --ppid