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 $
pkill firefox
अधिक जानकारी: http://linux.about.com/library/cmd/blcmdl1_pkill.htm