2008-10-02 11 views
237

उदाहरण के लिए, कभी-कभी जब मैं फ़ायरफ़ॉक्स शुरू करने का प्रयास करता हूं तो यह कहता है कि फ़ायरफ़ॉक्स प्रक्रिया पहले ही चल रही है। तो मैं यह करने के लिए है:मैं पीआईडी ​​के बजाय नाम से प्रक्रिया को कैसे मार सकता हूं?

[email protected]:~$ ps aux | grep firefox 
jeremy 7451 25.0 27.4 170536 65680 ?  Sl 22:39 1:18 /usr/lib/firefox-3.0.1/firefox 
jeremy 7578 0.0 0.3 3004 768 pts/0 S+ 22:44 0:00 grep firefox 
[email protected]:~$ kill 7451 

क्या मैं चाहता हूँ एक आदेश यह सब करना होगा कि मेरे लिए है। यह प्रक्रियाओं की सूची में यह (या जो भी) के लिए एक इनपुट स्ट्रिंग और ग्रेप ले जाएगा, और उत्पादन में सभी प्रक्रियाओं को मार डालेंगे:

[email protected]:~$ killbyname firefox 

मैं PHP लेकिन कार्यकारी ('ps aux' में यह कर की कोशिश की ।) केवल शो प्रक्रियाओं है कि कार्यकारी() PHP स्क्रिप्ट ही (ताकि केवल प्रक्रिया यह पता चलता है अपने आप में है) में से मार डाला गया लगता है

+0

जब मैं खिड़की है कि कहते हैं फ़ायरफ़ॉक्स पहले से ही चलाता है कि मैं आम तौर पर सिर्फ एक सेकंड प्रतीक्षा करने के लिए है और मैं फ़ायरफ़ॉक्स चलना शुरू करने से मिलता है (निश्चित रूप से यह हमेशा मामला हो नहीं सकता है)। – nuoritoveri

+1

यह सबसे सुरक्षित तरीका है क्योंकि जॉनबी इस जवाब में कहता है: http://stackoverflow.com/questions/6381229/how-to-kill-all-processes-matching-a-name/19733066#19733066 – tecnoshopbq

+0

संभावित डुप्लिकेट [बैश और रेगेक्स का उपयोग करके एक पंक्ति में एक प्रक्रिया को ढूंढें और मारें] (http://stackoverflow.com/questions/3510673/find-and-kill-a-process-in-one-line-using-bash-and-regex) – tripleee

उत्तर

355
pkill firefox 

अधिक जानकारी: http://linux.about.com/library/cmd/blcmdl1_pkill.htm

+1

साफ। मैं हत्यारे के बारे में जानता था, लेकिन पिक्ल नहीं। – Bernard

+4

pgrep भी एक अच्छा है। – Trenton

+6

स्लेइंग प्रक्रियाओं के आसपास जाने से पहले आप क्या मार रहे हैं यह जानने के लिए pgrep का उपयोग करना एक अच्छी बात है। विशेष रूप से '-f' का उपयोग करते समय। – Akrikos

3

मैं सामान्य रूप से killall का उपयोग विवरण के लिए see here आदेश।

55

आप के साथ killall <name>

killallनाम द्वारा प्रक्रियाओं को बंद कर सकते हैं निर्दिष्ट आदेशों की किसी भी चल रहे सभी प्रक्रियाओं के लिए एक संकेत भेजता है। यदि कोई सिग्नल नाम निर्दिष्ट नहीं है, तो SIGTERM भेजा जाता है।

सिग्नल या तो नाम से निर्दिष्ट किया जा सकता है (जैसे -HUP या -SIGHUP) या संख्या से (जैसे -1) या विकल्प द्वारा -s।

आदेश नाम नियमित अभिव्यक्ति (विकल्प -r) नहीं है और एक स्लैश (/), को क्रियान्वित करने कि विशेष फ़ाइल हत्या के लिए चयन किया जाएगा, उनके नाम से स्वतंत्र प्रक्रियाओं में शामिल हैं।

लेकिन अगर आप ps aux साथ प्रक्रिया नहीं दिख रहा है, तो आप शायद यह मारने का अधिकार नहीं होगा ...

+0

रुको, रुको। 'Ps aux' सिस्टम पर चल रहे सभी उपयोगकर्ताओं की सभी प्रक्रियाओं को सूचीबद्ध नहीं करता है? कौन सी प्रक्रियाएं नहीं दिखायी जाती हैं? –

+3

किसी प्रोग्राम को समाप्त करने के लिए मजबूर करने के लिए, TERM के बजाय किल भेजें: 'killall -s kill firefox' –

0

आप गनोम चलाते हैं, तो आप इस प्रणाली की निगरानी का उपयोग कर सकते (सिस्टम > प्रशासन-> सिस्टम मॉनीटर) विंडोज़ के तहत प्रक्रियाओं को मारने के लिए। केडीई के समान कुछ होगा।

35

एक लंबे समय तक विकल्प सा:

kill `pidof firefox` 
+21

pidof फ़ायरफ़ॉक्स | xargs kill -9 – hbt

+1

@hbt आपका अकेला ही मेरे लिए काम कर रहा है !! –

+1

यह आपके एम्बेडेड डिवाइस के लिए व्यस्त बॉक्स के अंतर्गत काम करता है :) – wiak

10

मैक पर मैं pgrep नहीं मिल रहा और न था killall इतना काम कर लिखा एक सरल एक लाइनर स्क्रिप्ट pkill सकता है: - यदि बहुत एक आसान

export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid 

ऐसा करने का तरीका कृपया साझा करें।

+1

मेरे मैक पर 'pkill' और' pgrep' दोनों काम करते हैं। वे बॉक्स से बाहर प्रतीत होते हैं ... – johk95

+1

लॉल। यह इस तरह के कार्य के लिए एक पागल आदेश है। कोई बात नहीं। क्या आपने उस साधारण एक पंक्ति को बुलाया था? : डी सरल हत्यारा – erm3nda

+0

@ erm3nda :-) सहमत है। वापस देखकर यह पागल दिखता है। याद नहीं कर सकता कि क्यों मेरे मैक पर हत्यारा काम नहीं कर रहा था। – Dhiraj

8

#killall आदेश का उपयोग करना:

#killall -9 <processname> 
4

अधिक सही होगा:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid 
3

ग्रेप के साथ मारने के लिए:

kill -9 `pgrep myprocess` 
48

भी संभव उपयोग करने के लिए:

pkill -f "Process name"

मेरे लिए यह सही काम करता है, यह वही था जो मैं ढूंढ रहा था। फ्लैग के बिना मेरे मामले में pkill नाम के साथ काम नहीं किया।

जब -f सेट किया गया है, तो पूर्ण कमांड लाइन पैटर्न मिलान के लिए उपयोग की जाती है।

+0

विशेष रूप से * शराब * '-f' विकल्प के साथ कुछ चलाने के लिए वास्तव में आवश्यक है। जैसे 'pkill -f "EvilWindowsServer.exe" ' – CodeBrauer

+0

यह स्वीकार्य उत्तर होना चाहिए। पहला जवाब कई प्रकार के कार्यक्रमों के साथ विफल रहता है, उदा। जो एक JVM पर चल रहे हैं। –

1

डिफ़ॉल्ट kill कमांड आदेश नाम को पीआईडी ​​के विकल्प के रूप में स्वीकार करता है। kill (1) देखें। अक्सर होने वाली परेशानी यह है कि bash अपना खुद का kill प्रदान करता है जो kill %1 जैसे नौकरी संख्या स्वीकार करता है, लेकिन कमांड नाम नहीं देता है। यह डिफ़ॉल्ट कमांड में बाधा डालता है। पूर्व कार्यक्षमता आप बाद से करने के लिए और अधिक उपयोगी है, तो आप

enable -n kill

बुला अधिक जानकारी के लिए bash (1) में kill और enable प्रविष्टियों को देखें द्वारा bash संस्करण निष्क्रिय कर सकते हैं।

+0

'सक्षम-हत्या' द्वारा किए गए क्रिया को मैं कैसे सक्षम करता हूं? – hyprfrcb

+1

@hyprfrcb 'kill kill सक्षम करें –

1

मैं खुद को एक ही सवाल पूछ रहा था लेकिन वर्तमान उत्तरों के साथ समस्या यह है कि वे सुरक्षित नहीं हैं प्रक्रियाओं को सुरक्षित रखने के लिए ... यह भयानक गलतियों का कारण बन सकता है:) ... विशेष रूप से यदि कई प्रक्रिया पैटर्न से मेल खाते हैं।

अस्वीकरण के रूप में, मैं एक समर्थक समर्थक नहीं हूं और निश्चित रूप से सुधार के लिए जगह है। (| ग्रेप -e myprocessname | awk '{$ 2 प्रिंट}' ps aux)

-1
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $ 
-1

मार -9 $:

तो मैं एक छोटे से श पटकथा लिखी करने के लिए सबसे पहले जांच करें कि आपको सही प्रक्रिया आईडी मिल रही हैं:

pgrep -f [part_of_a_command] 

यदि परिणाम अपेक्षित है।साथ जाएँ:

pkill -f [part_of_a_command] 
12

सबसे आसान तरीका है

#!/bin/sh 

killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep) 
if [ ! "${killables}" = "" ] 
then 
    echo "You are going to kill some process:" 
    echo "${killables}" 
else 
    echo "No process with the pattern $1 found." 
    return 
fi 
echo -n "Is it ok?(Y/N)" 
read input 
if [ "$input" = "Y" ] 
then 
    for pid in $(echo "${killables}" | awk '{print $2}') 
    do 
    echo killing $pid "..." 
    kill $pid 
    echo $pid killed 
    done 
fi 
8

अजीब है, लेकिन मैं इस तरह समाधान नहीं देखा है:

kill -9 `pidof firefox` 

यह भी कई प्रक्रियाओं (कई पीआईडी) को मार सकता है जैसे:

kill -9 `pgrep firefox` 

मैं pidof पसंद करें क्योंकि इसमें एकल लाइन आउटपुट है:

> pgrep firefox 
6316 
6565 
> pidof firefox 
6565 6316 
+0

जब मैं इसे निष्पादित करता हूं, तो मुझे त्रुटि 'हत्या: अमान्य संख्या' pidof myprogram'' त्रुटि मिली। यहाँ क्या बुरा है? – hyprfrcb

+0

इसने आज मेरी जिंदगी बचाई ... मैं और लिखना नहीं चाहता लेकिन मुझे खुशी है कि मैंने इसे यहां पाया। धन्यवाद दोस्त। – MilMike

1

स्टार्टअप पथ में snippet वाली सभी प्रक्रियाओं को मार दें। आप किसी निर्देशिका से डालने/निर्देशिका/स्निपेट के रूप में कुछ निर्देशिका से शुरू किए गए सभी ऐप्स को मार सकते हैं। जब आप एक ही ऐप निर्देशिका से उसी एप्लिकेशन के लिए कई घटक शुरू करते हैं तो यह काफी उपयोगी होता है।

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill 
संबंधित मुद्दे

 संबंधित मुद्दे