में 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; तथा
- यह सुरुचिपूर्ण और डरपोक है, एक दुर्लभ संयोजन :-)