linux में टॉप -c कमांड, प्रक्रियानाम के आधार पर सूचीबद्ध प्रक्रियाओं को फ़िल्टर करने के लिए


149
top -c

शीर्ष सभी प्रक्रियाओं को सूचीबद्ध करता है, विकल्प -u का उपयोग करके उपयोगकर्ता नाम से प्रक्रियाओं को फ़िल्टर करने के लिए अच्छे विकल्प हैं लेकिन मैं सोच रहा हूं कि क्या शीर्ष आउटपुट के COMMAND कॉलम के तहत सूचीबद्ध प्रक्रिया नाम के आधार पर प्रक्रियाओं को फ़िल्टर करने का कोई आसान तरीका है।

उदाहरण के लिए, मैं शीर्ष-विकल्प विकल्प की तरह चाहता हूँ-प्रक्रियानाम और शीर्ष प्रदर्शन pubstring के केवल अपने नाम में यह सब-स्ट्रिंग होना चाहिए

जवाबों:


214

Pgrep का उपयोग पिंड के मिलान कमांड लाइनों को प्राप्त करने के लिए:

top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)

शीर्ष -pको हम -d','पीपीजीईआरपी में उपयोग किए जाने वाले ग्रिडों की एक अलग सूची की उम्मीद करते हैं । -fPgrep में झंडा यह कार्यक्रम नाम के बजाय कमांड लाइन से मेल खाते हैं बनाता है।


12
बस याद रखें कि यदि 'string_to_match_in_cmd_line' के लिए नई प्रक्रियाएँ शुरू की जाती हैं, तो वे शीर्ष पर नहीं दिखेंगी; आपको शीर्ष छोड़ना होगा और इस कमांड को फिर से चलाना होगा
eugenevd

1
जैसा कि यूजिनेव्ड ने कहा, शीर्ष के बाद शुरू की गई नई प्रक्रियाओं के लिए यह काम नहीं करेगा। क्या ऐसा करने का कोई तरीका है? मुझे इसके नाम पर एक ही उपसर्ग के साथ कई कार्यक्रम चलाने की आवश्यकता है, और मैं यह देखना पसंद करूंगा कि उनमें से कितने जीवित तरीके से चल रहे हैं, हर बार एक नए शीर्ष (या सिर्फ एक पीएस) को निष्पादित करने की आवश्यकता नहीं है।
जेस्टर

1
@Jester, eugenevd, मुझे वही समस्या हुई जो आपने की थी। मैंने stackoverflow.com/a/27653841/681830 पर एक नया संस्करण बनाया , आशा है कि मदद करता है।
वैल

5
मैंने सामना किया top: pid limit (20) exceededइसलिए मैंने इसका उपयोग किया top -c -p $(pgrep -f string_to_match_in_cmd_line | head -20 | tr "\\n" "," | sed 's/,$//'):।
14:01 बजे f01

115

यह अंतःक्रियात्मक रूप से किया जा सकता है

रन करने के बाद top -c, oएक कॉलम पर एक फिल्टर को हिट करें और लिखें, उदाहरण के लिए पंक्तियों को दिखाने के लिए जहां COMMAND कॉलम में स्ट्रिंग फू है, लिखेंCOMMAND=foo

यदि आप कुछ बुनियादी उत्पादन चाहते हैं तो यह पर्याप्त हो सकता है:

top -bc |grep name_of_process

7
यह मुझे 'अमान्य विकल्प या वाक्यविन्यास देता है: -bc'
shmim

3
top -bc -n 1 यह अधिक सुविधाजनक है, क्योंकि यह पुनरावृत्तियों की संख्या को सीमित करता है 1.
गैलथ जूल

1
यह स्वीकृत उत्तर होना चाहिए। यह अधिक तीक्ष्ण है और 'शीर्ष' कमांड द्वारा उपलब्ध विकल्पों के साथ काम करता है। और यह नई प्रक्रियाओं को दर्शाता है।
अब्राहम TS

प्रक्रियाएँ गायब होती रहती हैं और फिर से प्रकट होती रहती हैं top -c , hit o and write a filter on a column
MrR

92

आप topचल रहे समय में फ़िल्टर जोड़ सकते हैं , बस oकुंजी दबाएं और फिर फ़िल्टर अभिव्यक्ति में टाइप करें। उदाहरण के लिए, सभी जावा प्रक्रियाओं की निगरानी के लिए फ़िल्टर अभिव्यक्ति का उपयोग करें COMMAND=java। आप कुंजी को फिर से दबाकर कई फ़िल्टर जोड़ सकते हैं, आप uकुंजी के साथ उपयोगकर्ता द्वारा फ़िल्टर कर सकते हैं , और आप =कुंजी के साथ सभी फ़िल्टर साफ़ कर सकते हैं ।


2
यह स्वीकृत उत्तर की तुलना में बेहतर समाधान है (मूल से 3 साल बाद यह समाधान सामने आया है)। मूल के विपरीत, यह समाधान वास्तव में नवप्रवर्तित प्रक्रियाओं पर भी काम करता है। बहुत महत्वपूर्ण है यदि आप अपाचे प्रक्रियाओं की निगरानी कर रहे हैं जो ऑन-डिमांड बनाई गई हैं।
नैट लैंप्टन

2
वास्तव में एक बेहतर समाधान है क्योंकि यह लाइव फिल्टर करता है। स्वीकृत समाधान शीर्ष चलने से पहले प्रक्रिया आईडी का समाधान करता है। रिजल्ट प्रोसेस वैसा ही है जैसे कि top -c -p 920,1345,1346विच तय है।
जोराम गिलार्ड

4
oफ़िल्टर के रूप में उपयोग करना शीर्ष के कुछ (पुराने) संस्करणों में मौजूद नहीं है: top: procps version 3.2.8उपयोगकर्ता फ़िल्टर मौजूद है, इसलिए यह काम करता है।
मनेवे नोव

13

@ पेरियल का आदेश बहुत अच्छा काम करता है! यदि आप भूल जाते हैं, तो दो चरणों में प्रयास करें ...

उदाहरण: केवल याकूके नामक एप्लिकेशन को प्रदर्शित करने के लिए फ़िल्टर शीर्ष:

$ pgrep yakuake
1755

$ top -p 1755

उपयोगी शीर्ष संवादात्मक कमांड 'c': पूर्ण पथ बनाम कमांड नाम 'k': PID द्वारा मारें 'F': फ़िल्टर द्वारा ... तीर के साथ चयन करें ... फिर क्रम सेट करने के लिए 's' दबाएँ।

नीचे जवाब भी अच्छा है ... मैं आज उस के लिए देख रहा था, लेकिन यह नहीं मिल सका। धन्यवाद


7

StackOverflow पर इतने सारे जवाबों की तलाश के बाद, मुझे अपनी ज़रूरतों को पूरा करने का जवाब नहीं मिला।

यही है, दिए गए कीवर्ड के साथ रिफ्रेशिंग रखने के लिए टॉप कमांड बनाना, और जब नई प्रक्रियाएं शुरू होती हैं तो हमें बार-बार CTRL + C / टॉप नहीं करना पड़ता है।

इस प्रकार मैं एक नया ...

यहां नो-रिस्टार्ट-आवश्यक संस्करण जाता है।

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)

__Keyword संशोधित करें और यह काम करना चाहिए। (Ubuntu 2.6.38 परीक्षण)

2.14.2015 जोड़ा गया: सिस्टम वर्कलोड भाग ऊपर दिए गए कोड के साथ गायब है। "लोड औसत" भाग के बारे में परवाह करने वाले लोगों के लिए:

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)

यह सिस्टम के कार्यभार के बारे में एक अवलोकन याद कर रहा है। सोने से पहले "अपटाइम" जोड़ें, छोटी प्रक्रिया सूचियों के लिए, यह पर्याप्त IMHO है।
सेवइल्स

1
@Sevyls इशारा करने के लिए धन्यवाद! अन्य कुछ प्रयासों के बाद (जो कि उतना अच्छा काम नहीं करता है) आपका संस्करण सर्वश्रेष्ठ में से एक हो सकता है। उत्तर संशोधित किया गया।
वैल

बहुत अच्छा काम करता है अगर मेरे पास एक या अधिक प्रक्रियाएं हैं जो उस मैच को चला रही हैं लेकिन मुझे एक "शीर्ष: अमान्य उपयोगकर्ता" मिलता है जब सभी बंद हो जाते हैं। दूसरी प्रक्रिया शुरू होने पर यह ठीक हो जाता है। मैं Raspbian FYI कर रहा हूं। धन्यवाद।
माइक

1

इस बारे में क्या?

top -c -p <PID>

4
हम प्रक्रियानाम (या इसके विकल्प) द्वारा फ़िल्टर करने का प्रयास कर रहे हैं और जब आप अपनी प्रक्रिया को पुनः आरंभ करेंगे तो आपको एक नया पृष्ठ मिलेगा।
सुर्जन कुमार गुल्ला

1

मैंने निम्नलिखित कोड के साथ एक शेल स्क्रिप्ट का उपयोग किया:

#!/bin/bash

while [ 1 == 1 ]
do
    clear
    ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
    sleep 5
done

1

जब प्रक्रिया सूची 20 प्रक्रियाओं से अधिक हो जाती है, तो अधिकांश उत्तर यहां विफल हो जाते हैं। वह top -pविकल्प सीमा है। पुराने शीर्ष वाले उन लोगों के लिए जो oविकल्पों के साथ फ़िल्टरिंग का समर्थन नहीं करते हैं, यहां पूर्ण स्क्रीन / कंसोल आउटूपट प्राप्त करने के लिए एक स्क्रिप्ट योग्य उदाहरण है (सारांश जानकारी इस आउटपुट से गायब है)।

__keyword="YOUR_FILTER" ; ( FILL=""; for i in  $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ;  while :; do HSIZE=$(( $(stty size|cut -f1 -d" ")  - 1 ));  (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )

कुछ स्पष्टीकरण

__keyword = your grep filter keyword
HSIZE=console height
FILL=new lines to fill the screen if list is shorter than console height
top -bcn1 = batch, full commandline, repeat once

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