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


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.