मैं एक बैश स्क्रिप्ट लिख रहा हूँ inotifywait
ताकि किसी निर्देशिका की निगरानी की जा सके और बदलावों का पता लगने पर कार्रवाई को बंद कर सके। कुछ इस तरह:
inotifywait -m ... | while read f; do something; done
चूंकि inotifywait
खुद से समाप्त नहीं होता है, इसलिए यह स्क्रिप्ट रुक नहीं जाएगी।
तो मेरी योजना यह थी कि मैं इनॉटिफ़ाइवाइट प्रक्रिया की PID प्राप्त कर लूँ, इसे एक फ़ाइल में सहेज लूँ और बाद में इसे अलग प्रक्रिया से मार दूँ, जैसे कहना है:
inotifywait -m ... | { echo ??PID?? > pid-file; while ... }
लेकिन मुझे नहीं पता कि पीआईडी कैसे मिलेगी। क्या इसे प्राप्त करने का एक सरल तरीका है? एक और तरीका सिर्फ शेल-स्क्रिप्ट के पीआईडी $$
को फ़ाइल में सहेजने और संपूर्ण शेल-स्क्रिप्ट को मारने के लिए है, लेकिन मैं कुछ लूप के बाद सफाई करना चाहता था।
मैंने उपयोग करने की कोशिश की है coproc
और मुझे लगता है कि यह काम करेगा लेकिन यह आवश्यकता से अधिक जटिलता की तरह लगता है।
pgrep inotifywait
। यह आपको पीआईडी देगा, मारने के लिए pkill inotifwait
,।
grep -v grep
, इसके बजाय एक ps -ef | grep [p]rocessname...
ही करना होगा।
-f
यदि आप निष्पादन योग्य नाम के अधिक के खिलाफ मिलान करने की आवश्यकता है तो हाँ, आप स्विच का उपयोग कर सकते हैं ।