2010-02-08 12 views
5

मैं कभी कभी अपने खोल में ऐसा करते हैं:बैश स्टडआउट में एकाधिक पंक्ति को एक पंक्ति में कैसे परिवर्तित करें?

[email protected]:~/shell$ ps aux | grep firefox | awk '{print $2}' 
2681 
2685 
2689 
4645 

$ kill -9 2681 2685 2689 4645 

वहाँ एक रास्ता मैं एक पंक्ति रिक्तियों से अलग में PIDs युक्त कई पंक्तियों बदल सकता है? (यह हर बार पीआईडी ​​टाइप करने के लिए थोड़ा परेशान है और मैं वास्तव में सीखना चाहता हूं :))

बहुत बहुत धन्यवाद।

xargs
+4

मुझे लगता है कि xargs वह है जो आप ढूंढ रहे हैं: "ps aux | grep firefox | awk '{print $ 2}' | xargs kill -9"। हालांकि इसे यहां जांचें। – Tom

+4

आप 'killall' कमांड को भी देखना चाहते हैं (हर जगह उपलब्ध नहीं) – cobbal

+3

जब तक यह आवश्यक न हो, आप '-9' का उपयोग करने से बचना चाहते हैं। यदि आप केवल 'पीआईडी ​​मार' का उपयोग करते हैं तो यह प्रोग्राम को क्लीनअप करने का मौका देता है। केवल '-9' का उपयोग करें यदि यह इसके बिना प्रतिक्रिया नहीं देता है। –

उत्तर

11

इस के लिए आसान तरीका उपयोग कर रहा है

ps aux | grep firefox | awk '{print $2}' | xargs kill -9 

यह एक ही समय में सब पीआईडी ​​के साथ मार आदेश लागू करेगा। (बिल्कुल वही जो आप चाहते हैं)

+0

बढ़िया, मुझे यह पता था :) – Tom

+0

कभी-कभी इस तरह की प्रक्रियाएं चलती रहेंगी: '/ usr/bin/python/usr/शेयर/पैकेजकिट/हेल्पर्स/यम/yumBackend.py get-files ... फ़ायरफ़ॉक्स; 5.0-2.fc15; x86_64; अपडेट और ... 'और -9 समस्याएं पैदा करेंगे (इस उदाहरण में, yum दूषित डेटाबेस/फ़ाइलें और एक बाधित अद्यतन) – yingted

2
pids="" 
for pid in $(ps aux | grep firefox | awk '{print $2}') 
do 
pids=" $pid" 
done 
kill -9 $pids 
+3

क्या आपका मतलब था 'pids = "$ pids $ pid" '? मैं नहीं देखता कि यह कैसे काम कर रहा है ... –

+1

धन्यवाद एक आकर्षण की तरह काम करता है :) – Zenet

2

इसके बजाय pkill का उपयोग करें। एक pgrep भी है।

यह वही करेगा जो आप चाहते हैं, और आप कितना आसान प्राप्त कर सकते हैं?

pkill firefox 

पीकेल के -9 विकल्प का उपयोग करना आप वर्तमान में क्या करेंगे; हालांकि, सिगकिल से बचें:

इस सिग्नल को हल्के ढंग से उपयोग न करें। प्रक्रिया को साफ करने का कोई मौका नहीं होगा। यह अनाथाश्रम बाल प्रक्रियाओं, अस्थायी फ़ाइलों, आवंटित ताले, सक्रिय साझा स्मृति खंड, व्यस्त सॉकेट, और अन्य संसाधन संसाधन असंगतताओं के पीछे छोड़ सकता है। यह प्रणाली के बाद के संचालन में समस्याओं को डीबग करने के लिए आश्चर्यजनक और कठिन हो सकता है। [wlug.org]

और:

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

SIGTERM हत्या शेल कमांड द्वारा भेजा गया डिफ़ॉल्ट सिग्नल है। SIGINT एक टर्मिनल इंटरप्ट (नियंत्रण-सी) से भेजा संकेत है। [debian.org]

+1

धन्यवाद रोजर, मैं मैन पेजों को बहुत उपयोगी देख रहा हूं :) – Zenet

6
killall -9 firefox 
+0

भी काम करता है :) धन्यवाद! – Zenet

2

आप यह सिर्फ AWK

ps -eo pid,args | awk 'BEGIN{s="kill -9 "}$2~/bash/{s=s" "$1} END{system(s)}' 
2

मैं pkill उपयोग के बारे में अन्य सभी प्रतिक्रियाओं के साथ सहमति व्यक्त करते हैं के साथ कर सकते हैं, लेकिन, ... और बदले xargs का उपयोग कर के, .. tr को यह पाइप आप कर सकते हैं:।

kill $(ps aux | grep [f]irefox | awk '{print $2}' | tr '\n' ' ') 

इसके अलावा, [f] उपयोग करने पर विचार तो यह है कि आप grep प्रक्रिया से मेल नहीं खाते हैं।

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