कैसे कई प्रक्रियाओं को मारने के लिए


21

उपयोग को मारने के लिए प्रक्रिया का PID खोजने के लिए:

pgrep <process command>

मैं तब पीआईडी ​​को मारने के लिए किल कमांड का उपयोग करता हूं pgrep <process command>

kill <PID>

क्या इन आदेशों को एक में जोड़ा जा सकता है ताकि पीआईडी ​​या पीआईडी ​​द्वारा लौटाया जा सके pgrep <process command>? या कमांड नाम से कई प्रक्रियाओं को मारने की एक विधि है?

कुछ इस तरह : kill(pgrep <name of process>)


3
क्या आपने कोशिश की pkill? वैकल्पिक रूप से, आप उपयोग करना चाह सकते हैं xargs
मैथ्यूॉक जूल

1
ध्यान दें कि इस तरह से सामान के लिए मैन पेज भी अच्छे हैं। अक्सर वे न केवल आपको कमांड का उपयोग करने का तरीका बताते हैं, वे आपको संबंधित कमांड के बारे में भी बताते हैं। इस स्थिति में, pgrepमैन पेज का pkillसभी जगह उल्लेख होता है (जैसे कि 2 कमांड एक ही पैकेज से आते हैं)।
पैट्रिक

जवाबों:


27

आप pkill का उपयोग कर सकते हैं:

pkill httpd

आप प्रक्रिया प्रतिस्थापन का उपयोग करना चाह सकते हैं (हालाँकि यह उतना स्पष्ट नहीं है):

kill $(pgrep command)

और आप उपयोग करना चाहते हैं xargs:

pgrep command | xargs kill

4
मैंने एक जवाब में इसी तरह का काम किया और मुझे बताया गया कि मैंने दौड़ की स्थिति का परिचय दिया। प्रक्रिया ID को अमान्य कॉल inbetween करने के लिए pgrepऔर हो सकता है kill। बस उपयोग करें pkill
Kusalananda

3
@ कुसलानंद pkillप्रक्रिया सूची प्राप्त करने और वास्तव में संकेत भेजने के बीच भी ऐसा ही हो सकता है , यह केवल उस मामले में देखना कठिन है।
हॉब्स

1
मैं एक जवाब लिखने की कोशिश करने जा रहा था kill $(ps|head -1)जिसने दौड़ की स्थिति से बचने के लिए कुछ पसंद किया था ... लेकिन वास्तव में इससे बचने का कोई तरीका नहीं है। प्रक्रिया पाइपलाइन में किसी भी बिंदु पर मर सकती है।
रोस प्रेसर

बस pkill के साथ सावधान रहें क्योंकि कुछ कार्यक्रमों में एक से अधिक उदाहरण चल सकते हैं और आप उन सभी को मारना नहीं चाह सकते हैं। जब तक आप pgrep और pkill (दौड़) चलाते हैं, तब तक किसी दूसरे के शुरू न होने तक pgrep चलाने में मदद मिलेगी।
जो

1
यहां तक ​​कि सी प्रोग्राम भी दौड़ की स्थिति से बच नहीं सकता है, खिड़की सिर्फ छोटी होगी। इसे वास्तव में परमाणु रूप से करने का एकमात्र तरीका एक सिस्टम कॉल को जोड़ना होगा जो नाम से प्रक्रियाओं को मारता है। लेकिन प्रक्रिया आईडी आमतौर पर बहुत जल्दी उपयोग नहीं की जाएगी, इसलिए खतरा लगभग कोई भी नहीं है।
बारमर

17

आप के killallरूप में अच्छी तरह से उपयोग कर सकते हैं

killall firefox

SIGTERMसभी firefoxप्रक्रियाओं को भेजने के लिए ।


8
ध्यान दें कि killallविभिन्न यूनिक्स प्रणालियों पर अलग-अलग अर्थ हैं - यदि आप एक गैर-लिनक्स सिस्टम पर हैं तो प्रलेखन की जांच करना सुनिश्चित करें।
रैंडम 32३२

killall -KILL firefoxमहसूस कर सकते हैं sooo पुरस्कृत।
पाइप

गैर-पोर्टेबिलिटी है killall, इसलिए मैं इसका इस्तेमाल कभी नहीं करता। killallउदाहरण के लिए सोलारिस बॉक्स पर चलना विनाशकारी है।
पैट्रिक

9

हां, आप आउटपुट पर बैश फीचर और लूपिंग का उपयोग कर सकते हैं।

$ for proc in $(pgrep <process command>); do kill $proc; done

मुझे मिलता हैkill <no>:failed: operation not permitted
टिमो

संभवतः आपके पास सही अनुमति नहीं है या प्रक्रिया अब मौजूद नहीं है, कृपया देखें: superuser.com/questions/1175485/…
liplriani

0

आप सरणी के साथ कई प्रक्रिया को मार सकते हैं। इस मामले में आप विकल्पों को निर्दिष्ट कर सकते हैं $ip, $hostnameया कुछ इसी तरह का।

ip=your_ip_address; declare -a arr=$(ps aux|grep tail|grep $ip|awk '{print $2}'); for pid in ${arr[@]}; do kill -9 $pid; done;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.