पीएस के आउटपुट को पार्स करने वाले एकल कमांड का उपयोग करके एक रनिंग प्रोसेस की पिड कैसे प्राप्त करें?


22

मैं एक ऐसी लाइन की तलाश कर रहा हूं, जो चल रही प्रक्रिया का पृष्ठ लौटाए।

वर्तमान में मेरे पास है:

ps -A -o pid,cmd|grep xxx|head -n 1

और इससे मुट्ठी लौट आती है pid, command। मुझे आउटपुट से केवल पहले नंबर की आवश्यकता है और बाकी को अनदेखा करें। मुझे लगता है sedया awkयहाँ मदद मिलेगी, लेकिन उनके साथ मेरा अनुभव सीमित है।

इसके अलावा, यह एक और समस्या है, अगर यह xxx नहीं चल रहा है, तो यह grep के पीआईडी ​​को लौटा देगा।

एक पंक्ति का होना वास्तव में महत्वपूर्ण है, क्योंकि मैं कुछ और करने के लिए आउटपुट का पुन: उपयोग करना चाहता हूं, जैसे कि उस प्रक्रिया को मारना।


1
सिर के माध्यम से इसे पाइप करें और एन -1 के साथ लौटने के लिए लाइन निर्दिष्ट करें?
माइक मैकमोहन

जवाबों:


28

यदि आप सिर्फ इस प्रक्रिया का उपयोग करना चाहते हैं pgrepतो यदि आप उपलब्ध हैं तो उपयोग कर सकते हैं । pgrep <command>कमांड की पिड वापस आ जाएगी (या मामले में लिस्ट ऑफ पिड्स) कमांड के एक से अधिक उदाहरण चल रहे हैं, जिस स्थिति में आप headया अन्य उपयुक्त कमांड का उपयोग कर सकते हैं )
आशा है कि यह मदद करता है!


+1 pgrep का मेरा सामान्य उपयोग:kill `pgrep xxx`
स्टीव

20
@ चेस्ट: शायद आपको देखना चाहिए pkill
अगली सूचना तक रोक दिया गया।

7

बस एक और आदेश की जरूरत; आप अंतरिक्ष-अलग मूल्यों की एक पंक्ति से केवल पहला क्षेत्र चाहते हैं:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

खैर, दो। मैंने आउटपुट से खुद को हटाने के लिए एक और grep जोड़ा।


6

बस pgrep का उपयोग करें, यह बहुत सीधे आगे है

pgrep -o -x xxxx

उपरोक्त सटीक नाम के साथ सबसे पुरानी प्रक्रिया का चयन करता है


और चूंकि ओपी प्रक्रिया को मारने के लिए कमांड का उपयोग करना चाहता है, pkill(उसी आर्ग के साथ) सबसे प्रत्यक्ष विकल्प होगा।
bstpierre


0

Cygwin पर चल रहा है, इसलिए मैं -o का उपयोग नहीं कर सकता, लेकिन ऐसा कुछ है:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580

0

आप कुछ ऐसा कर सकते हैं

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'

तब xxx को प्रक्रिया नाम देना होगा और यह एंकर ^ के कारण grep नहीं लेगा

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