में bash
, आपको करने में सक्षम होना चाहिए:
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
इसके कामकाज का विवरण इस प्रकार है:
ps
आप सभी प्रक्रियाओं की सूची देता है।
grep
फिल्टर है कि आपकी खोज स्ट्रिंग के आधार पर, [p]
एक चाल है आप वास्तविक उठा रोकने के लिए grep
प्रक्रिया ही।
awk
केवल आपके प्रत्येक पंक्ति, जो पीआईडी है के दूसरे क्षेत्र देता है।
$(x)
निर्माण साधन निष्पादित करने के लिए x
तो इसके उत्पादन लेने के लिए और यह कमांड लाइन पर डाल दिया। ps
उपरोक्त निर्माण के अंदर उस पाइपलाइन का आउटपुट प्रक्रिया आईडी की सूची है ताकि आप एक कमांड के साथ समाप्त हो जाएं जैसे kill 1234 1122 7654
।
यहां एक प्रतिलेख दिखाया गया है जो इसे कार्रवाई में दिखाता है:
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+ Terminated sleep 3600
[1] Terminated sleep 3600
[2] Terminated sleep 3600
[3]- Terminated sleep 3600
[4]+ Terminated sleep 3600
और आप इसे सभी स्लीपर्स को समाप्त करते हुए देख सकते हैं।
grep '[p]ython csp_build.py'
बिट को थोड़ा और विस्तार से समझाते हुए :
जब आप इसका sleep 3600 &
अनुसरण ps -ef | grep sleep
करते हैं, तो आप इसके साथ दो प्रक्रियाएँ प्राप्त करते हैं sleep
, sleep 3600
और grep sleep
( और क्योंकि इन दोनों sleep
में है, यह रॉकेट विज्ञान नहीं है)।
हालांकि, ps -ef | grep '[s]leep'
इसके साथ एक प्रक्रिया नहीं बनाई जाएगी sleep
, यह इसके बजाय बनाता है grep '[s]leep'
और यहाँ मुश्किल सा है: grep
इसे नहीं ढूंढता क्योंकि यह नियमित अभिव्यक्ति की तलाश में है "चरित्र वर्ग के किसी भी चरित्र [s]
(जो है s
) द्वारा पीछा किया जाता है leep
।
दूसरे शब्दों में, यह खोज है sleep
लेकिन grep प्रक्रिया है grep '[s]leep'
जो इसमें नहीं है sleep
।
जब मुझे यह दिखाया गया (एसओ पर यहां किसी के द्वारा), तो मैंने तुरंत इसका इस्तेमाल करना शुरू कर दिया
- यह जोड़ने की तुलना में एक कम प्रक्रिया है
| grep -v grep
; तथा
- यह सुरुचिपूर्ण और डरपोक है, एक दुर्लभ संयोजन :-)