पाइप के माध्यम से मारने के लिए तर्क कैसे दें


85

मुझे एक निश्चित प्रक्रिया की खोज करने और उस प्रक्रिया को मारने की आवश्यकता है। मैंने इस तरह एक कमांड लिखी:

ps -e | grep dmn | awk '{print $1}' | kill

कहाँ प्रक्रिया का नाम है dmn। लेकिन यह काम नहीं कर रहा है। मैं नाम और killउनके द्वारा प्रक्रिया कैसे पा सकता हूं ।

जवाबों:


162
kill $(ps -e | grep dmn | awk '{print $1}')

8
नए $()सिंटैक्स का उपयोग करें kill $(ps -e | grep dmn | awk '{print $1}'):।
स्ट्रेटस

7
दूसरों के लिए fwiw, मुझे इस जवाब को संशोधित करने के लिए इसे काम करना था: kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')सुनिश्चित नहीं कि क्यों और न ही पर्याप्त देखभाल इसे आगे भी देखें।
जोशवीर

1
@ जोशवीर यह इसलिए है क्योंकि अन्यथा kill'grep' प्रक्रिया को भी मारने की कोशिश की गई थी जो पैटर्न की खोज करने की कोशिश कर रही थी
meain

क्या यह \nप्रत्येक awk के बाद की तरह नहीं होगा awk '{print $1"\n"}'?
सिपालाजो डे एरिएरेस

43

यदि आप इसे हटाना चाहते हैं तो कई प्रक्रियाएँ हैं:

ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill

नोट: आपको आउटपुट से grep प्रक्रिया को हटाने की आवश्यकता है, इसीलिए grep -v grepइसका उपयोग किया जाता है।


17
आप अपने grep में ब्रैकेट के अंदर पहला चार लगाकर grep दिखाने से बच सकते हैं, जैसे: grep [d] mn
Oldskool

1
@ ऑर्सकोल नाइस ट्रिक ग्रेप रेगुलर एक्सप्रेशन से मेल न खाने के लिए मेटाचेचर का उपयोग करना अपने आप में एक अच्छा विचार नहीं है।
जुल्काडो

@ ओर्सकोल, +1, आप एक प्रतिभाशाली हैं!
jcr

अच्छी चाल, हालांकि यह एक शेल स्क्रिप्ट में बदलने के लिए इसे और अधिक जटिल
बनाता है

17

आप उपयोग कर सकते हैं

pkill dmn 

अगर आपके सिस्टम में pkill कमांड है


1
हत्या के बजाय pkill के लिए +1। यह अलग बिना "अर्थ" कई प्लेटफार्मों पर उपलब्ध है ( killall सोलारिस के बराबर है killall5 उदाहरण के लिए लिनक्स पर - यही कारण है, को मारने है सभी प्रक्रियाओं)
plundra

4

बस दूसरों को जोड़ना, लेकिन मुझे awk की regex सुविधाओं का उपयोग करना पसंद है:

kill $(ps | awk '/dmn/{print $1}')

4

यदि आपके पास pidofअपने सिस्टम पर कमांड है (मुझे पता है कि शेल ऐसे हैं जैसे कि ZSH डिफ़ॉल्ट रूप से इसके साथ आते हैं, जब तक कि मैं गलत नहीं हूं), तो आप कुछ ऐसा कर सकते हैं।

kill -9 $(pidof dmn)


2

आपको इसकी आवश्यकता नहीं है pipe, यदि आपके पास pidofकमांड है और छवि का नाम पता है, तो मैंने इसे इस तरह किया है:

kill $(pidof synergyc)

$()मुझे यह समझ में आता है क्योंकि यह उस आउटपुट को एक वैरिएबल में परिवर्तित करता है जिसे मारने वाला उपयोग कर सकता है, अनिवार्य रूप से जैसे पाइप करेगा। छोटे और कुछ अन्य विकल्पों की तुलना में समझने में आसान है, लेकिन शायद कम लचीला और अधिक प्रत्यक्ष भी।


0
for procid in $(ps -aux | grep "some search" | awk '{print $2}'); do kill -9 $procid; done

हैलो दोस्तों .. हम इसे लूप के लिए उपयोग कर सकते हैं।

"कुछ खोज" यहां किसी भी प्रक्रिया का नाम है जिसे आप खोजना चाहते हैं, उदाहरण के लिए "जावा" तो हम कहते हैं कि जावा प्रक्रिया की गिनती 200+ है इसलिए एक-एक करके मारना बहुत विशिष्ट होगा।

तो आप ऊपर दिए गए आदेश का उपयोग कर सकते हैं।

धन्यवाद।


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