শীর্ষ কমান্ড আউটপুট ফিল্টার করছে


12

আমি একটি ম্যাক চালাচ্ছি এবং topএকটি নির্দিষ্ট প্রক্রিয়ার জন্য কমান্ডের আউটপুট ফিল্টার করতে চাই যে কেবল পিআইডি, কম্যান্ড এবং% সিপিইউ কলাম প্রদর্শিত হবে।

প্রক্রিয়াটির পিআইডি পাওয়ার পরে, আমি চালিয়ে যাচ্ছি:

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'
অ্যাস্ট্রা সার্গ

@ আস্ট্রসার্গ আমার জন্য কাজ করে। নোট করুন যে এটি একটি ম্যাক ওএস প্রশ্ন, যার 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. ডিফল্টরূপে, ইন্টারেক্টিভ মোডে শীর্ষে রান। এটি আমার পক্ষে উপযুক্ত নয়, আমি প্রাসঙ্গিক ডেটা ক্যাপচার এবং মুদ্রণ করতে চাই। আমি তার পরে ইন্টারেক্টিভভাবে ডেটা প্রদর্শন করার কাজটি পরিচালনা করব। শীর্ষ মানচিত্র থেকে প্রাসঙ্গিক উক্তি:

    -বি: ব্যাচ মোড অপারেশন 'ব্যাচ মোডে' শীর্ষে শুরু হয়, যা শীর্ষস্থান থেকে অন্য প্রোগ্রামগুলিতে বা কোনও ফাইলে আউটপুট প্রেরণের জন্য কার্যকর হতে পারে। এই মোডে, শীর্ষগুলি ইনপুট গ্রহণ করবে না এবং '-n' কমান্ড-লাইন বিকল্পের সাহায্যে নির্ধারিত পুনরাবৃত্তি সীমা না হওয়া বা হত্যা না হওয়া পর্যন্ত চলবে না।

    -n: পুনরাবৃত্তির সংখ্যাটি সীমাবদ্ধ হিসাবে: -ন সংখ্যাটি শেষের আগে শীর্ষের সর্বোচ্চ পরিমাণে পুনরাবৃত্তির সংখ্যা বা ফ্রেম উল্লেখ করে।

    এটি অ্যাডজাস্টেড শীর্ষ কমান্ড যা কেবল একবার আউটপুট প্রিন্ট করে, তারপরে প্রস্থান করে:

    $ top -b -n 1

  3. আমি যে পিআইডিটি দেখতে চাই তা জানি, তাই আমি শীর্ষে আরও একটি বিধিনিষেধ যুক্ত করব, সুতরাং এটি কেবলমাত্র সেই প্রক্রিয়া সম্পর্কিত ডেটা মুদ্রণ করে:

    $ top -b -n 1 -p 2569

  4. এমনকি ব্যাচ মোডে, শীর্ষগুলি এখনও একটি শিরোনাম প্রিন্ট করে, এতে আপসটাইম, ফ্রি মেমরি / অদলবদু ইত্যাদি জাতীয় বিস্তৃত সিস্টেমের পরিসংখ্যান থাকে I আমার কেবল একটি লাইন দরকার - এটি আমার প্রক্রিয়া সম্পর্কে ডেটা ধারণ করে, তাই আমি এটি পুরো আউটপুট থেকে এটি কেটে দেব:

    $ 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. এখন অবধি, আমি কমান্ড লাইনে এই হেরফেরগুলি করছি, এখন আমাদের হার্ডকোডযুক্ত বিশেষ ক্ষেত্রে কিছুটা দৃistence়তা এবং নমনীয়তা যুক্ত করার মুহুর্তটি। আমি পুরো লাইনটি একটি সরল শেল স্ক্রিপ্টে স্থানান্তরিত করছি। আমি এটিকে 3 টপ বলব , নামটি জোর দেওয়া হয়েছে কারণ এটি পরে ব্যবহার করা হবে:

    #!/bin/bash

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

  7. পিআইডি নম্বরটি হার্ডকোডযুক্ত, এখানে কীভাবে স্ক্রিপ্টটিকে কমান্ড লাইন আর্গুমেন্ট হিসাবে স্বীকার করতে হবে:

    #!/bin/bash

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

    পিআইডি 2569 সম্পর্কে 3 টপ ডিসপ্লে পরিসংখ্যান তৈরি করতে, এটি অবশ্যই এই জাতীয় বলা উচিত:

    $ ./3top 2569

  8. আমি সিপিইউ লোডের পরে শতাংশও প্রদর্শন করতে চাই, তাই আমি আমার 3 টি স্ক্রিপ্টটিকে এভাবে টিউন করছি:

    #!/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

    এটি প্রতি সেকেন্ডে 3 টপ চালিয়ে রিয়েল টাইম মনিটরিং করবে।


11
ব্যবহারকারী ওএস এক্স-এ রয়েছে এবং তার কোনও গ্নু নেই topঅবৈধ বিকল্প বা বাক্য গঠন: -বি । কেন বার বার এটি উপবিষ্ট হয়েছিল তা ধারণা নেই।
ড্যানিয়েল বেক

5
হোমব্রিউ, ম্যাকপোর্টস বা ফিংক ব্যবহার করে জ্ঞানু top(ইন procps) ইনস্টল করা যাবে না এবং হয় 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(ie Shift+ w) টিপুন ~/.toprc
  6. প্রস্থান করুন top, তারপরে আপনার সেটিংস সংরক্ষিত হয়েছে তা যাচাই করতে পুনরায় লঞ্চ করুন।
  7. আপনি যখন ডিফল্ট লেআউটে ফিরে যেতে চান, প্রবর্তনের আগে ~/.toprcএমন কোনও নামকরণ করুন । আপনি যখন সর্বনিম্ন লেআউটে স্যুইচ করতে চান, চালু করার আগে পুনরায় নামকরণ করুন ।~/min.toprctop~/min.toprc~/.toprctop

এই ফাইলটির নাম পরিবর্তন এবং প্রবর্তন topসম্ভবত আমার চেয়ে আউন্স আরও অভিজ্ঞতা এবং জ্ঞান সহকারীর দ্বারা একটি সাধারণ শেল স্ক্রিপ্ট হিসাবে কাজ করা যেতে পারে। আপনার নিয়মিত topবিন্যাসটি ইতিমধ্যে কাস্টমাইজ করা থাকলে আপনার বিশেষ বিবেচনার প্রয়োজন হবে ।


ফিল্টার যুক্ত করা (এমনকি ম্যানুয়ালি হলেও) যুক্ত করা সম্ভব .toprc? আমি RUID>999শুরুতে ফিল্টার যুক্ত করতে চাই ।
ডঃ বেকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.