पहले पाइपलाइन में कमांड की पीआईडी ​​प्राप्त करना


11

मैं एक बैश स्क्रिप्ट लिख रहा हूँ inotifywaitताकि किसी निर्देशिका की निगरानी की जा सके और बदलावों का पता लगने पर कार्रवाई को बंद कर सके। कुछ इस तरह:

inotifywait -m ... | while read f; do something; done

चूंकि inotifywaitखुद से समाप्त नहीं होता है, इसलिए यह स्क्रिप्ट रुक नहीं जाएगी।

तो मेरी योजना यह थी कि मैं इनॉटिफ़ाइवाइट प्रक्रिया की PID प्राप्त कर लूँ, इसे एक फ़ाइल में सहेज लूँ और बाद में इसे अलग प्रक्रिया से मार दूँ, जैसे कहना है:

inotifywait -m ... | { echo ??PID?? > pid-file; while ... }

लेकिन मुझे नहीं पता कि पीआईडी ​​कैसे मिलेगी। क्या इसे प्राप्त करने का एक सरल तरीका है? एक और तरीका सिर्फ शेल-स्क्रिप्ट के पीआईडी $$को फ़ाइल में सहेजने और संपूर्ण शेल-स्क्रिप्ट को मारने के लिए है, लेकिन मैं कुछ लूप के बाद सफाई करना चाहता था।

मैंने उपयोग करने की कोशिश की है coprocऔर मुझे लगता है कि यह काम करेगा लेकिन यह आवश्यकता से अधिक जटिलता की तरह लगता है।


आप कुछ इस तरह का उपयोग कर सकते हैं `ps -ef | grep प्रक्रियानाम | grep -v grep | awk '{प्रिंट $ 2}' | xargs मार -9 `
कीवी

@ कीवी - उस गंदगी के बजाय सिर्फ एक pgrep inotifywait। यह आपको पीआईडी ​​देगा, मारने के लिए pkill inotifwait,।
slm

@ आपके सिस्टम के आधार पर आपके पास prerep और pkill नहीं होगा जबकि grep और ps जबकि लगभग मौजूद होंगे। आपका स्वागत है
किवी

@ कीवी - संदिग्ध, वे उपकरण बहुत सर्वव्यापी हैं। इसके अलावा, आप एक करने की जरूरत नहीं है grep -v grep, इसके बजाय एक ps -ef | grep [p]rocessname...ही करना होगा।
स्लम

1
@DavidsonChua - -fयदि आप निष्पादन योग्य नाम के अधिक के खिलाफ मिलान करने की आवश्यकता है तो हाँ, आप स्विच का उपयोग कर सकते हैं ।
slm

जवाबों:


6

एक पाइपलाइन में, सभी प्रक्रियाओं को समवर्ती रूप से शुरू किया जाता है , ऐसा कोई भी नहीं है जो दूसरों की तुलना में पहले हो।

तुम यह कर सकते थे:

(echo "$BASHPID" > pid-file; exec inotifywait -m ...) | while IFS= read -r...

या आंशिक रूप से:

sh -c 'echo "$$" > pid-file; exec inotifywait -m ...' | while IFS= read -r...

यह भी ध्यान दें कि जब whileलूप समाप्त होने वाला सबस्क्रिप्शन समाप्त हो जाता है, inotifywaitतो अगली बार स्टडआउट के लिए कुछ लिखने पर स्वचालित रूप से मारा जाएगा।



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.