क्या मैं मारने के साथ pgrep को चेन कर सकता हूं?


31

मैंने देखा है कि |पहले कमांड का परिणाम दूसरे को भेजने के लिए उपयोग किया जाता है। मैं उन सभी प्रक्रियाओं को मारना चाहूंगा जो एक नाम से मेल खाते हैं।
यह वही है जो सामान्य रूप से करता है:

$ pgrep name
5089
5105

और कई तर्क के साथ काम करने लगते हैं kill:

sudo kill 5089 5105

लेकिन यह गलत है:

pgrep name | kill

तो इसे ठीक से कैसे करें?


3
pkill। और अगर है कि अस्तित्व में नहीं था, kill $(pgrep ...)
मिकेल

मैं केवल उन विशिष्ट आदेशों के कारण ही नहीं पूछ रहा था, बल्कि कमान की बेहतर समझ भी हासिल कर रहा था। लेकिन जैसा कि मैं प्रश्न स्कोर से देख सकता हूं, समझ में आने वाले सवालों का कोई मतलब नहीं है ...
Tomáš Zato - Reinstate Monica

यदि आप प्रश्न को अधिक सामान्य बनाना चाहते हैं, और सुनिश्चित करें कि यह डुप्लिकेट नहीं है, तो मैं इसे वोट कर सकता हूं।
मिकेल

क्षमा करें, गलती से मेरी पिछली टिप्पणी हटा दी गई। मैं एक टैबलेट पर हूं और इस साइट में एक दूसरे के बगल में छोटे बटन हैं।
मिकेल

मैं सिर्फ यह कह रहा था कि मैंने यह अस्वीकार कर दिया है क्योंकि आपका प्रश्न ऐसा कुछ नहीं पूछ रहा है जो आप से नहीं सीखा जा सकता है man pgrep। डाउनवोट बटन का कहना है कि यह तब होता है जब कोई प्रश्न बिना शोध के प्रयास दिखाता है, और मैं आपके प्रश्न में कोई भी नहीं देख सकता। खेद है कि अगर कठोर लग रहा था।
मिकेल

जवाबों:


42

इसे इस्तेमाल करे:

pgrep name | xargs kill

यदि आप उपयोग करते हैं pgrep name | kill, तो ouput pgrep nameis stdin के लिए फ़ीड है kill। क्योंकि killस्टड से तर्क नहीं पढ़ता है, इसलिए यह काम नहीं करेगा।

उपयोग करना xargs, यह killस्टड से तर्क का निर्माण करेगा । उदाहरण:

$ pgrep bash | xargs echo
5514 22298 23079

5
स्पेस बनाम न्यूलाइन से कोई लेना-देना नहीं। सिर्फ इसलिए कि मारना स्टड पर तर्क नहीं पढ़ता है।
मिकेल

@ मिकेल: मेरी गलती, तय।
कोउंगलम


5

विशिष्ट के बजाय सामान्य उत्तर देने के लिए ...

पाइप एक प्रोग्राम से दूसरे प्रोग्राम के इनपुट के रूप में आउटपुट पास करने के लिए हैं।

ऐसा लगता है कि आप एक प्रोग्राम के आउटपुट को कमांड लाइन के तर्क के रूप में दूसरे प्रोग्राम में उपयोग करने की कोशिश कर रहे हैं , जो कि अलग है।

ऐसा करने के लिए, कमांड प्रतिस्थापन का उपयोग करें ।

उदाहरण के लिए यदि आप चलाना चाहते हैं

sudo kill 5089 5105

और आपके पास एक कमांड है pgrep nameजो आउटपुट करता है5089 5105

आप उन्हें एक साथ रखते हैं

sudo kill $(pgrep name)

बहुत बहुत धन्यवाद। मुझे उम्मीद है कि इससे अन्य शुरुआती लोगों को भी मदद मिलेगी।
टॉम ज़ातो -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.