कैसे एक नाम से मेल खाते सभी प्रक्रियाओं को मारने के लिए?


260

कहें कि मैं हर प्रक्रिया को मारना चाहता हूं जिसमें अमरक शब्द है। मैं उन कमांड को प्रिंट कर सकता हूं जिन्हें मैं निष्पादित करना चाहता हूं। लेकिन मैं वास्तव में शेल को कैसे निष्पादित करता हूं। अर्थात।

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031

| sh -xअपने कमांड लाइन के शेष के बाद जोड़ें ?
जोनाथन लेफ्लर

7
कभी भी kill -9एक प्रक्रिया का उपयोग न करें देखें [प्रक्रिया प्रबंधन] [1] [१]: mywiki.wooledge.org/… ...
फ्रेड्रिक

उपरोक्त टिप्पणी में यह जोड़ना कि न केवल किल -9 एक बुरा विचार है, बल्कि यह भी तथ्य है कि आप उनके नाम से कई प्रक्रियाओं को मारने की कोशिश कर रहे हैं। एक प्रक्रिया के नाम के बारे में कुछ भी अनूठा नहीं है और इसलिए पहचान के लिए एक बुरा उम्मीदवार है।
राउल-

क्या यह amarokxप्रक्रिया को भी मार देगा ? मैं vi vi, यह मारता है supervisorctlजिसमें शब्द में `vi 'होता है।
Gank

4
उपयोग नहीं करने पर यह लेख -9बहुत ही अनपेक्षित है - क्या कोई बेहतर जानकारी है कि लोग इसका उपयोग क्यों न करें? यह सिर्फ कहता है "न ही, और आग लगाने वाले लोग इसे इस्तेमाल करते हैं"; लेकिन सब मैंने कभी-कभी हर जगह देखा है कि kill -9 {pid}कुछ को कैसे मारना है ...
dwanderson

जवाबों:


437

से man 1 pkill

-f     The pattern is normally only matched against the process name.
       When -f is set, the full command line is used.

उदाहरण के लिए, यदि हम इन पंक्तियों को देखें ps aux:

apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

हम pkill -fविकल्प का उपयोग करके उन सभी को मार सकते हैं :

pkill -f httpd

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

19
अतिरिक्त ताकत के -9लिए, अंत में जोड़ें !
मिलीलीटर 31

क्या यह httpdxप्रक्रिया को भी मार देगा ? मैं vi vi, यह मारता है supervisorctlजिसमें शब्द में `vi 'होता है।
गैंक

बहुत बढ़िया - उबंटू १è.०४.१ एलटीएस
सलाथिल जीनस

लिए केस-संवेदी मेल का उपयोग कर -i, की तरह pkill -fi wine। पहले और बाद में सत्यापित करने के लिए, का उपयोग करें ps uax | grep -i wine
वल्केन रैवेन

207
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs (1): xargs - तर्क सूची (ओं) का निर्माण और उपयोगिता निष्पादित करते हैं। सहायक आप की तरह कुछ करने के लिए बहस में पाइप करना चाहते हैं killया lsया इतने पर।


3
Xargs का उल्लेख करने के लिए अंक - यह सब pgrep / pkill सामान सभी बहुत अच्छी तरह से है, लेकिन xargs एक सामान्य उद्देश्य उपकरण है, और हर linux / unix पर मानक है।
४१ पर १।

4
"मार: ऐसी कोई प्रक्रिया नहीं"
सेरीन

3
Cerin ऐसा इसलिए है क्योंकि यह grep प्रक्रिया को मारने की कोशिश कर रहा है, जो पहले से ही समाप्त हो गया है। यह अच्छा होना चाहिए।
कोस्टी मुरारू

6
Grep प्रक्रिया पर कब्जा करने से बचने के लिए एक छोटी सी चाल है: ps aux | grep -ie [a] मैरोक | awk '{प्रिंट $ 2}' | xargs मार -9
RCross

8
आप grep को फ़िल्टर करने के लिए एक और grep कॉल भी जोड़ सकते हैं (मुझे यह पढ़ने / याद रखने में आसान लगता है) ps aux | grep -ie amarok | grep -v grep | awk '{print $2}' | xargs kill -9 ( grep -vके लिए खड़ा है grep --invert)
driftcatcher

47

उपयोग pgrep

kill -9 $(pgrep amarok)

26
pkill -9 amarok
इलगनटर

1
pkill मूल रूप से अधिक पाइप या प्रक्रियाओं को बनाए बिना "हर प्रक्रिया को शब्द <शब्द>" वाला भाग संभालता है। Pgrep की आवश्यकता को समाप्त करने के लिए पूर्ण प्रक्रिया नाम खोज के लिए -f विकल्प देखें।
टिम बिलावा

2
डिफ़ॉल्ट रूप से pkill प्रक्रिया नामों पर आंशिक मिलान की अनुमति देता है। यदि यह अस्तित्व में होता है तो यह कमांड amarok2 को भी मार देगा। यदि आप सटीक नाम निर्दिष्ट करना चाहते हैं तो -x या -f का उपयोग करें।
user79878

यह विफल हो जाएगा अगर pgrep के लिए मैच नहीं कर रहे हैं
alfredocambera

पूर्ण नाम मिलान उपयोग के लिएkill -9 $(pgrep -f amarok)
7

27

ऐसा करने का सुरक्षित तरीका है:

pkill -f amarok

1
इसे जोड़ने के लिए, मैंने -lध्वज जोड़ा । मैं वास्तव में सिर्फ एलियास pkillके लिए pkill -flतो मैं कुछ इस तरह चला सकते हैं pkill jbossऔर यह प्रक्रिया है कि यह सिर्फ मौत हो थूक से बाहर होगा।
nland

क्या यह amarokxप्रक्रिया को भी मार देगा ? मैं vi vi, यह मारता है supervisorctlजिसमें शब्द में `vi 'होता है।
गैंक

यह शीर्ष (टिम के) उत्तर से कैसे भिन्न है? उदाहरण के नाम से मेल खाता है, अन्यथा समान दिखता है? @ndland pkill: invalid option -- 'l'- proc-ng से pkill 3.3.12
Xen2050

18

मुझे लगता है कि यह कमांड किला आपकी जरूरत है। कमांड को "नाम से हत्या प्रक्रियाओं" के रूप में वर्णित किया गया है। इसका उपयोग करना आसान है। उदाहरण के लिए

killall chrome

यह कमांड Chrome की सभी प्रक्रिया को मार डालेगी। यह किंडल कमांड के बारे में एक लिंक है

http://linux.about.com/library/cmd/blcmdl1_killall.htm

आशा है कि यह आदेश आपकी मदद कर सकता है।


यह केवल नाम से मेल खाता है, पूर्ण कमांड लाइन से नहीं। निश्चित रूप से खोज ps auxके आउटपुट के रूप में समान नहीं है
Xen2050 7

12

pkill -x प्रक्रिया के नाम से बिल्कुल मेल खाता है।

pkill -x amarok

pkill -f समान है लेकिन एक नियमित अभिव्यक्ति पैटर्न की अनुमति देता है।

ध्यान दें कि कोई अन्य पैरामीटर (जैसे -x, -f) के साथ pkill प्रक्रिया नामों पर आंशिक मैचों की अनुमति देगा। तो "pkill amarok" amarok, amarokBanana, bananaamarok, आदि को मार देगा।

काश -x डिफ़ॉल्ट व्यवहार था!


क्या यह amarokxप्रक्रिया को भी मार देगा ? मैं vi vi, यह मारता है supervisorctlजिसमें शब्द में `vi 'होता है।
गैंक

@Gank, हाँ, कहीं भी "amarok" के साथ किसी भी प्रक्रिया का नाम।
user79878

केवल अमारोक्स के बजाय अमारोक को कैसे मारें?
गैंक

1
@ गैंक, -x फ्लैग। pkill -x amarok
user79878

4

यदि आप एक कमांड के आउटपुट को निष्पादित करना चाहते हैं, तो आप इसे अंदर डाल सकते हैं $(...), हालांकि आपके विशिष्ट कार्य के लिए कमांड killallऔर pkillकमांड पर एक नज़र डालें ।


3

आप अपने उत्पादन का मूल्यांकन उप-प्रक्रिया के रूप में भी कर सकते हैं, जो पीछे के टिक्स के साथ या इसे $ () के अंदर रखकर सब कुछ के आसपास होता है:

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     

3

किल -s 9 कीps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}' कोशिश करें 11 नवंबर की प्रक्रियाओं को मारने के लिए या 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}' को मारने की प्रक्रियाओं के लिए उन प्रक्रियाओं को मारने के लिए जिनमें शब्द अमरोज हैं


0

हो सकता है कि कमांड्स को एग्जीक्यूटेबल फाइल में जोड़ना, सेटिंग + एक्स अनुमति और फिर एग्जीक्यूट कर रहा हो?

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk

-1

यदि आप cygwin या कुछ न्यूनतम शेल का उपयोग कर रहे हैं तो आपके पास killallइस स्क्रिप्ट का उपयोग कर सकते हैं:

Killall.sh - प्रक्रिया के नाम से मार डालो।

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill --

उपयोग:

$ killall <process name>

मुझे मिल रहा हैkill: invalid argument f
रोज़स्टेक्स

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