फ़िल्टरिंग शीर्ष कमांड आउटपुट


12

मैं एक मैक चला रहा हूं और topएक विशेष प्रक्रिया के लिए कमांड के आउटपुट को फ़िल्टर करना चाहता हूं जैसे कि केवल PID, COMMAND और% CPU कॉलम प्रदर्शित होते हैं।

प्रक्रिया के पीआईडी ​​प्राप्त करने के बाद, मैं चलाता हूं:

top -pid 1234

हालाँकि यह उस प्रक्रिया के लिए 15 से अधिक कॉलम प्रदर्शित करता है। क्या मैं केवल जागने और प्रदर्शित करने के लिए 'कमांड' के आउटपुट को पाइप कर सकता हूं:

PID COMMAND %CPU

कॉलम?

मैं किसी पाठ फ़ाइल में आउटपुट संग्रहीत नहीं करना चाहता और फिर उसे संसाधित करना चाहता हूं। मैं वास्तविक समय में प्रक्रिया की निगरानी में दिलचस्पी रखता हूं।

जवाबों:


8
top -pid 3907 -stats "pid,command,cpu"
  • -pid 3907: आपकी प्रक्रिया आई.डी.
  • -stats pid,command,cpu: केवल शो प्रक्रिया आईडी, नाम और सीपीयू%

awkआउटपुट पर चलने की आवश्यकता नहीं है ।


यदि आप आउटपुट को पोस्ट-प्रोसेस करना चाहते हैं, तो लॉगिंग मोड -l 0में चलाने के लिए उपयोग करें (0 का मतलब अनिश्चित काल के लिए, बाकी सब नमूनों की संख्या को सीमित करता है)। आउटपुट इस तरह दिखेगा (दो पुनरावृत्ति):

Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads 
2011/05/10 19:15:13
Load Avg: 0.14, 0.14, 0.09 
CPU usage: 20.0% user, 26.66% sys, 53.33% idle 
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16345 total, 1048M resident, 54M private, 338M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 750M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.

PID   COMMAND      %CPU
3907  WindowServer 0.0 
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads 
2011/05/10 19:15:14
Load Avg: 0.13, 0.14, 0.09 
CPU usage: 0.95% user, 1.90% sys, 97.14% idle 
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16346 total, 906M resident, 54M private, 386M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 751M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.

PID   COMMAND      %CPU
3907  WindowServer 2.7 

awkकेवल 13 वीं पंक्ति को प्रदर्शित करने के लिए एक समान उपकरण का उपयोग करें या (इन पंक्तियों में उस उदाहरण में मान शामिल हैं):

$ top -l 0 -pid 3907 -stats pid,command,cpu | awk 'NR%13==0'
3907  WindowServer 0.0 
3907  WindowServer 1.3 
3907  WindowServer 2.2 

# top -p1 -stats "pid,command,cpu" top: unknown option 't'
AstraSerg

@AstraSerg मेरे लिए काम करता है। ध्यान दें कि यह एक मैक ओएस प्रश्न है, जिसमें topलिनक्स की तुलना में अलग है।
डैनियल बेक

6

यह निश्चित रूप से किया जा सकता है और मैं यह बताने जा रहा हूं कि मैं यह कैसे करूंगा। मैं यह नहीं कह रहा हूं कि यह एक इष्टतम तरीका है, लेकिन यह काम करता है। मैं लिनक्स (और बैश शेल) का उपयोग कर रहा हूं, इसलिए मेरे शीर्ष का डिफ़ॉल्ट व्यवहार थोड़ा अलग हो सकता है। इस प्रकार आपको अपने विशेष परिदृश्य के लिए इस मिनी-हाउटो को ट्यून करने की आवश्यकता हो सकती है।

  1. बिना किसी तर्क के, बस शीर्ष चलाएं :

    $ top

    यहाँ हैडर और मेरे आउटपुट से एक प्रासंगिक पंक्ति है:

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    2569 user 20 0 339m 86m 10m S 7.8 6.9 6:42.99 java

    मैंने कुछ समय के लिए स्मृति में रहने वाली एक प्रक्रिया को उठाया है और वास्तव में सीपीयू का उपभोग करता है, मैं इसे अंतिम लक्ष्य तक पहुंचने के लिए परीक्षण प्रक्रिया के रूप में उपयोग करूंगा।

  2. डिफ़ॉल्ट रूप से, इंटरैक्टिव मोड में शीर्ष चलता है। यह मुझे शोभा नहीं देता है, मैं संबंधित डेटा पर कब्जा करना चाहता हूं और इसे प्रिंट करना चाहता हूं। मैं उसके बाद अंतःक्रियात्मक रूप से डेटा प्रदर्शित करने का कार्य संभालूंगा। शीर्ष मैनपेज के प्रासंगिक उद्धरण:

    -b: बैच मोड का संचालन 'बैच मोड' में शुरू होता है, जो अन्य कार्यक्रमों या फ़ाइल में ऊपर से आउटपुट भेजने के लिए उपयोगी हो सकता है। इस मोड में, शीर्ष इनपुट को स्वीकार नहीं करेगा और तब तक चलता रहेगा जब तक कि आपके द्वारा 'एन-एन' कमांड-लाइन विकल्प के साथ सेट की गई सीमाएँ या जब तक मार न दी जाए।

    -n: पुनरावृत्तियों की संख्या इस प्रकार है: -n संख्या पुनरावृत्तियों की अधिकतम संख्या निर्दिष्ट करती है, या फ़्रेम, शीर्ष को समाप्त होने से पहले उत्पादन करना चाहिए।

    यह समायोजित शीर्ष कमांड है जो केवल एक बार आउटपुट प्रिंट करता है, फिर बाहर निकलता है:

    $ top -b -n 1

  3. मुझे पता है कि मैं जिस पीआईडी ​​को देखना चाहता हूं, इसलिए मैं शीर्ष पर एक और प्रतिबंध जोड़ूंगा, इसलिए यह केवल उस प्रक्रिया के बारे में डेटा प्रिंट करता है:

    $ top -b -n 1 -p 2569

  4. यहां तक ​​कि बैच मोड में, शीर्ष अभी भी एक हेडर को प्रिंट करता है, जिसमें मिस-सिस्टम-वाइड आँकड़े जैसे अपटाइम, फ्री मेमोरी / स्वैप आदि होते हैं। मुझे इसकी आवश्यकता है। मुझे केवल एक पंक्ति की आवश्यकता है - वह जिसमें मेरी प्रक्रिया के बारे में डेटा है, इसलिए मैं इसे इस तरह पूरे आउटपुट से काट दूंगा:

    $ top -b -n 1 -p 2569 | tail -n 2 | head -n 1

    जैसा कि आप देख सकते हैं, मुझे 1 से दूसरी पंक्ति मिली है।

  5. मैं इस लाइन को जागने के लिए केवल उन कॉलमों को निकालने के लिए पाइप करूँगा जिनकी मुझे आवश्यकता है:

    $ top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'

  6. अब तक, मैं कमांड लाइन में इन जोड़तोड़ों को कर रहा हूं, अब यह हमारे हार्डकोड विशेष मामले में कुछ दृढ़ता और लचीलापन जोड़ने का क्षण है। मैं पूरी लाइन को एक साधारण शेल स्क्रिप्ट में स्थानांतरित कर रहा हूं। मैं इसे 3 टॉप कहूंगा , नाम पर बल दिया गया है क्योंकि इसका उपयोग बाद में किया जाएगा:

    #!/bin/bash

    top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'

  7. PID नंबर हार्डकोड है, यहां स्क्रिप्ट को कमांड लाइन तर्क के रूप में स्वीकार करने के लिए कैसे बनाया जाए:

    #!/bin/bash

    top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'

    PID 2569 के बारे में 3top प्रदर्शन आँकड़े बनाने के लिए, इसे इस तरह कहा जाना चाहिए:

    $ ./3top 2569

  8. मैं CPU लोड के बाद भी प्रदर्शित प्रतिशत चाहता हूं, इसलिए मैं अपनी 3top स्क्रिप्ट को इस तरह से ट्यून कर रहा हूं:

    #!/bin/bash

    out=$(top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}')

    echo "$out%"

    मैंने कमांड की एक श्रृंखला के पूरे आउटपुट को एक चर में (पाइप के माध्यम से जुड़ा हुआ) पुनर्निर्देशित किया है। तब मैं सिर्फ इको का उपयोग करके इसे प्रिंट करता हूं और अंत में '%' जोड़ता हूं, क्योंकि सीपीयू लोड अंतिम क्षेत्र है

  9. इस बिंदु पर मेरे पास एक बैच स्क्रिप्ट है जो एक पीआईडी ​​को तर्क के रूप में स्वीकार करती है और एक बार आँकड़े प्रिंट करती है। इसके बजाय वास्तविक समय की निगरानी चाहते हैं? यह आसान है, क्योंकि घड़ी यह कर सकती है! स्क्रिप्ट को इस तरह से चलाएं:

    $ watch -n 1 3top 2569

    यह प्रति सेकंड एक बार 3top चलाकर वास्तविक समय की निगरानी करेगा।


11
उपयोगकर्ता OS X पर है और उसका कोई Gnu नहीं है topअमान्य विकल्प या वाक्य रचना: बी । पता नहीं क्यों यह बार-बार उखाड़ा गया था।
डैनियल बेक

5
Gnu top(में procps) Homebrew, MacPorts या Fink का उपयोग करके स्थापित नहीं किया जा सकता है और makeया तो का उपयोग करके स्रोत से संकलित नहीं किया जा सकता है cc top.c
डैनियल बेक

2

topप्रदर्शन स्वरूप अनुकूलन योग्य है, लेकिन वहाँ आदेश पंक्ति पर प्रदर्शन विकल्प निर्दिष्ट करने के लिए एक तरीका नहीं है। यदि आप आविष्कारशील हैं, तो, आप शायद वह कर सकते हैं जो आपको चालाकी से ~/.toprcफाइल में हेरफेर करने की आवश्यकता है ।

मान लें कि आपने पहले से top(और ~/.toprcफ़ाइल नहीं है ) के प्रदर्शन को अनुकूलित किया है :

  1. लॉन्च करें top
  2. fफ़ील्ड चयन मोड दर्ज करने के लिए दबाएँ ।
  3. प्रत्येक फ़ील्ड के *लिए इसका अगला भाग है जिसे आप नहीं चाहते हैं, उस फ़ील्ड को अचयनित करने के लिए संबंधित अक्षर दबाएं। उदाहरण के लिए, फ़ील्ड eको अचयनित करने के लिए दबाएँ User Name। जब आप कर रहे हैं, आप केवल एक होना चाहिए *करने के लिए अगले Process Id, CPU usage, और Command name/line
  4. Spaceमुख्य विंडो पर लौटने के लिए दबाएं ।
  5. प्रेस W(यानी Shift+ w) अपनी ~/.toprcफ़ाइल के लिए वर्तमान लेआउट को बचाने के लिए ।
  6. छोड़ें top, फिर सत्यापित करें कि आपकी सेटिंग्स सहेजी गई हैं।
  7. जब आप डिफ़ॉल्ट लेआउट पर लौटना चाहते हैं, तो लॉन्च करने से पहले ~/.toprcकुछ का नाम बदलें । जब आप न्यूनतम लेआउट पर स्विच करना चाहते हैं, तो लॉन्च करने से पहले नाम बदलें ।~/min.toprctop~/min.toprc~/.toprctop

इस फ़ाइल का नाम बदलना और लॉन्च करना topसंभवत: एक सरल शेल स्क्रिप्ट में किया जा सकता है, किसी के द्वारा मेरे लिए अधिक अनुभव और ज्ञान के साथ। यदि आपके नियमित topलेआउट को पहले ही अनुकूलित किया जा चुका है, तो आपको विशेष ध्यान देने की आवश्यकता होगी ।


क्या कोई फ़िल्टर जोड़ना संभव है (भले ही मैन्युअल रूप से) .toprc? मुझे RUID>999स्टार्टअप पर फिल्टर जोड़ना पसंद है ।
डॉ। बीको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.