operating - linux vs windows




मैं पीआईडी के बजाय नाम से प्रक्रिया कैसे मार सकता हूं? (12)

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

[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

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

[email protected]:~$ killbyname firefox

मैंने इसे PHP में करने की कोशिश की लेकिन निष्पादन ('ps aux') केवल उन प्रक्रियाओं को दिखाता है जिन्हें PHP स्क्रिप्ट में exec () के साथ निष्पादित किया गया है (इसलिए यह केवल एक ही प्रक्रिया है जो दिखाती है।)


Grep के साथ मारने के लिए:

kill -9 `pgrep myprocess`

kill -9 $ (ps aux | grep -e myprocessname | awk '{print $ 2}')


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

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

आप killall <name> साथ नाम से प्रक्रियाओं को मार सकते हैं

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

संकेतों को या तो नाम (जैसे -एचयूपी या -SIGHUP ) या संख्या (उदाहरण -1 ) या विकल्प - द्वारा निर्दिष्ट किया जा सकता है।

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

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


ऐसा करने का सबसे आसान तरीका यह है कि आपको सही प्रक्रिया आईडी मिल रही है:

pgrep -f [part_of_a_command]

अगर परिणाम अपेक्षित है। साथ जाना:

pkill -f [part_of_a_command]

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

enable -n kill

अधिक जानकारी के लिए बाश (1) में प्रविष्टियों को kill और enable करने के enable देखें।


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

एक अस्वीकरण के रूप में, मैं एक समर्थक समर्थक नहीं हूं और निश्चित रूप से सुधार के लिए जगह है।

तो मैंने एक छोटी सी लिपि लिखी:

#!/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

मैं सामान्य रूप से विवरण के लिए killall कमांड का उपयोग करता हूं।


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


#killall कमांड का उपयोग करना:

#killall -9 <processname>

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






linux