दिए गए नाम के साथ सभी प्रक्रिया को कैसे मारना है?


16

मैं कमांड चलाता हूं ps -A | grep <application_name>और इस तरह की प्रक्रिया की सूची प्राप्त करता हूं :

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

: मैं सूची से सभी प्रक्रिया को मारने के लिए चाहता हूँ 19440, 21630, 22694।

मैंने कोशिश की है ps -A | grep <application_name> | xargs kill -9 $1लेकिन यह त्रुटियों के साथ काम करता है।

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

मैं इसे इनायत कैसे कर सकता हूं?

जवाबों:


25
pkill -f <application_na>

उन सभी प्रक्रियाओं को मार देगा, जिनमें <application_na>उनके नाम का पैटर्न है।

आदमी pkill


9

समस्या यह है कि ps -A | grep <application_name> | xargs -n1इस तरह से आउटपुट देता है

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

आप आउटपुट के awkपहले कॉलम को प्राप्त करने के लिएps उपयोग कर सकते हैं ।

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

पीआईडी ​​की सूची लौटाएंगे

19440
21630
22694

और kill -9 $1आपके पास एक कमांड है जो सभी पीआईडी ​​को मारता है

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

यह सही है मैं इसे bash स्क्रिप्ट पर परीक्षण करता हूं यह प्रक्रिया को मारता है। तुरंत कोई त्रुटि नहीं है + यहां तक ​​कि अगर प्रक्रिया शुरू नहीं हुई है तो यह कोई त्रुटि नहीं दिखाता है जो मैं चाहता हूं, यहां ffmpeg प्रोसेसर हत्यारा का उदाहरण है nano /usr/bin/ffmpegk । । । । ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1 । । । । chmod a+rx /usr/bin/ffmpegk
— सलेम एफ

मुझे इस बात में समस्या है कि kill -9अगर मुझे कोई प्रक्रिया मेल नहीं खाती है तो आउटपुट मिलता है
— डैनियल एफ

1
इसके बजाय grep, आपको awkनाम पर मिलान करने के लिए उपयोग करना चाहिए :ps -A | awk "\$4 == \"$1\" { print \$1; }"
— Toby Speight

0

killall वह कर सकता है।

$ killall application_name

क्या सभी को एक आवेदन नाम में नियमित अभिव्यक्ति की अनुमति है?
— Łukasz डी Tulikowski

killall --regexp "appl.*me"हालांकि अलग-अलग हत्याओं को लागू किया जा सकता है। देखते हैं man killall।
— रुडाइमियर

किलॉल पर्याप्त नहीं है कभी-कभी मुझे इसे प्रक्रिया को मारने के लिए तीन बार भेजने की आवश्यकता होती है, और यहां तक ​​कि इसे मारने में भी विफल होता है, मेरे लिए एकमात्र तेजी से काम करने वाला समाधान है kill -9 pidमुझे लगता है कि @ asukaszD.Tulikowski विशेष रूप से बैश स्क्रिप्ट के लिए सबसे अच्छा काम कर रहा समाधान है।
— सलेम एफ

-1
ps -eaf | grep -i applicationname| grep -iv 'grep'| awk '{print "kill -9" " "  $2}'|sh

हालांकि मैंने अभी तक इस प्रश्न पर मतदान नहीं किया है, आपने यह नहीं बताया है कि यह अन्य समाधानों की तुलना में अलग या बेहतर क्यों है - जो इस से बहुत मिलते-जुलते हैं - या यह वर्णन करते हैं कि क्यों ओपी को उनके बदलाव से परेशानी थी।
— जेफ स्कालर

-2

मेरा दृष्टिकोण @ के पास है Łukasz D. Tulikowski। उपयोग करने के बजाय grep <application_name>; मैंने उपयोग किया है grep "[a]pplication_name", जो अपनी स्वयं की प्रक्रिया कमांड लाइन के साथ मेल नहीं खाता है।

वर्गाकार ब्रैकेट अभिव्यक्ति grepमिलान चरित्र वर्ग पैटर्न का हिस्सा है । (संदर्भ) ।


आप आउटपुट के awkपहले कॉलम को प्राप्त करने के लिए उपयोग कर सकते हैं ps।

ps -A | grep "[a]pplication_na" | awk '{print $2}' | xargs -n1

पीआईडी ​​की सूची लौटाएंगे

7644
407
406

बाद में kill -9 $1आपके पास एक कमांड है जो सभी पीआईडी ​​को मारता है

ps aux | grep "[a]pplication_na" | awk '{print $2}' | xargs kill -9 $1

परीक्षण को सही ढंग से करने के लिए grepउपयोग awkकरने के बजाय क्यों ? grepउदाहरण के लिए, लक्ष्य को विकल्प के रूप में शामिल करने वाले नामों से मेल खाएगा।
— टोबी स्पाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.