কিভাবে শিরোনামের সাহায্যে গ্রেট পিএস আউটপুট


26

আমি স্থির জায়গায় শিরোনামগুলির সাথে পিএস আউটপুটটি কীভাবে গ্রেপ করতে পারি?

এই দুটি প্রক্রিয়াটি আমার সার্ভারে চলমান একটি অ্যাপ তৈরি করে ....

root     17123 16727  0 16:25 pts/6    00:00:00 grep GMC
root     32017     1 83 May03 ?        6-22:01:17 /scripts/GMC/PNetT-5.1-SP1/PNetTNetServer.bin -tempdir /usr/local/GMC/PNetT-5.1-SP1/tmpData -D

এর মানে 6-22:01:17কি এটি 6 দিন ধরে চলছে? প্রক্রিয়াটি কত দিন চলছে তার দৈর্ঘ্য নির্ধারণ করতে আমি চেষ্টা করছি ...

দ্বিতীয় কলামটি কি প্রক্রিয়া আইডি? সুতরাং আমি যদি kill 32017এটি দ্বিতীয় প্রক্রিয়া হত্যা করব?

উত্তর:


37
ps -ef | egrep "GMC|PID"

"GMC" প্রতিস্থাপন করুন এবং psপ্রয়োজন অনুসারে স্যুইচ করুন।

উদাহরণ আউটপুট:

root@xxxxx:~$ ps -ef | egrep "disk|PID"

UID        PID  PPID  C STIME TTY          TIME CMD
paremh1  12501 12466  0 18:31 pts/1    00:00:00 egrep disk|PID
root     14936     1  0 Apr26 ?        00:02:11 /usr/lib/udisks/udisks-daemon
root     14937 14936  0 Apr26 ?        00:00:03 udisks-daemon: not polling any devices

8
এটি কেন কাজ করে সে সম্পর্কে কিছু তথ্য যুক্ত করা ভাল to
লেন

2
না, এটি ব্যবহারকারীর জন্য অনুশীলন।
হিপ্পি

@ এলিজাহলিন এটি শিরোনামের পাঠ্যের সাথে মেলে - এই ক্ষেত্রে, পিআইডি। তবে আপনি এটি ইউআইডি, পিটিটাইম, বা শিরোনামের অন্য কোনও কিছুর জন্য সরিয়ে নিতে পারেন ...
বেন ক্র্যাসি

5
সুতরাং ps -eসমস্ত প্রক্রিয়া নির্বাচন করে এবং ps -fসম্পূর্ণ ফর্ম্যাট তালিকা যা কলাম শিরোনাম দেখায়। তারপরে আমরা কলামের শিরোনাম এবং আউটপুটটিকে পাইপ করি egrep, যা গ্রেপ প্রসারিত এবং পাইপটির |একটি বিশেষ অর্থ রাখতে দেয়, যা ওআর (এটি বা এটি)। সুতরাং আপনি কলামের শিরোনামের সাথে পিআইডিটির সাথে মিলিয়ে শেষ করুন আউটপুট লাইনগুলি matter
এলিজা লিন

: আমি উবুন্টু 16,04, যেমন মধ্যে egrep /, grep -E কমান্ড সহজ উদ্ধৃতি চিহ্ন ব্যবহার ছিল ps -ef | grep -E 'GMC|PID'
Vlax

13

গীকোসরকে ধন্যবাদ, আমি পৃথক কমান্ডের চেয়ে এই দাবিটি আপনার দাবির জন্য ব্যবহার করতে চাই:

ps -ef | head -1; ps -ef | grep "your-pattern-goes-here"

কৌশলটি হ'ল ";" ব্যবহার করা কমান্ড শৃঙ্খলে শেল দ্বারা সমর্থিত।


এটি গৃহীত উত্তরের চেয়ে পরিষ্কার এবং আরও শক্ত। এটি জোর দেয় না যে শিরোনামটির মধ্যে পিআইডি রয়েছে এবং গ্রেপ স্ট্রিংয়ে জটিলতা যুক্ত করে না।
7yl4r

2
ওহ অপেক্ষা করুন ... আপনি ps -efবারবার পেয়েছেন । আরও ভাল হ'লps -ef | { head -1 ; grep "your-pattern" ; }
7yl4r

@ 7yl4r কখনই সেই শেল ক্ষমতা ব্যবহার করে না। আমি আপনার উন্নত কমান্ড চেষ্টা করেছি, পুরোপুরি কাজ করে! শিখেছি, :)
ভিক লাউ

3
অন্যদের কৌতূহলের জন্য 'গ্রুপিং কমান্ডস' নামে পরিচিত এই প্রযুক্তি সম্পর্কে ব্যাখ্যাটি দেখুন: gnu.org/software/bash/manual/html_node/Command-Grouping.html
ভিক লউ

@ 7yl4r দুর্দান্ত কৌশল! আমি কীভাবে কমান্ডটি পুনর্বার করবেন না তা দেখছিলাম। দলবদ্ধ কমান্ড এমনকি পাইপ হতে পারে: ps -ef | { head -1; grep "pattern" | head -5; }। প্যাটার্ন গ্রেপ-এডের প্রচুর ফলাফল থাকলে দরকারী!
9:02

6

দ্বিতীয় কলামটি প্রক্রিয়া আইডি; চতুর্থটি যখন প্রক্রিয়াটি তৈরি করা হয়েছিল (এটি সাধারণত আপনার প্রোগ্রাম শুরু হওয়ার সময় হয় তবে সর্বদা নয়; বিবেচনা করুন execve()এবং বন্ধুরা); 6th ষ্ঠ হ'ল সিপিইউ সময় খরচ হয়। সুতরাং এটি 8 দিন ধরে চলছে এবং প্রায় 7 দিন সিপিইউ সময় ব্যবহার করেছে, যা আমি উদ্বেগজনক বলে বিবেচনা করব।

একই অনুরোধে শিরোনাম পাওয়া সর্বোত্তম কৌশল; আমি শুধু একটি আলাদা করতে হবে ps | head -1। আপনি psনিজের পছন্দ পদ্ধতি বা এর pgrepপরিবর্তে এমন কিছু ব্যবহার করার বিষয়ে বিবেচনা করতে পারেন grep, যা সত্যই শিরোলেখ দিয়ে যাওয়ার জন্য ডিজাইন করা হয়নি।



বর্তমান প্রক্রিয়া অগ্রাধিকার, যা এর অতীতের সিপিইউ এবং আই / ও ব্যবহার এবং ব্যবহারকারী বা সিস্টেম-নির্ধারিত niceমানের উপর ভিত্তি করে । ছোট সংখ্যা উচ্চতর অগ্রাধিকার। grepএক্ষেত্রে , অগ্রাধিকার 0 কারণ এটি ডিস্ক পাঠানোতে অবরুদ্ধ ছিল এবং এর আউটপুট লেখার জন্য উত্পন্ন হয়েছে এবং PNetTNetServer.binএটি একটি বৃহত সংখ্যা কারণ এটি নিয়মিতভাবে অবরুদ্ধ না করে তার টাইমলাইসটি ব্যবহার করে। (সময়সূচী জটিল এবং বিশদটি সঠিক শিডিয়ুলার ব্যবহার করা হচ্ছে তার উপর নির্ভর করবে।)
গিকোসোসর

5

উদাহরণস্বরূপ সমাধানটি সহজ এবং কার্যকর, তবে অবশ্যই আপনি সর্বদা 'পিআইডি' (যদিও যুক্তিসঙ্গত অনুমানের চেয়ে বেশি) এবং একই স্ট্রিং অন্য কোথাও notুকছে না তার উপর নির্ভর করে। আমি অনুমান করছি এটি আপনার প্রয়োজনের জন্য যথেষ্ট, তবে ক্ষেত্রে কেউ বিকল্প চাইলে সেড আছে।

শেড আপনাকে কেবল "প্রথম লাইনটি মুদ্রণ করুন, তারপরে প্যাটার্নযুক্ত যে কোনও রেখা" বলতে দেয়। উদাহরণ স্বরূপ:

ps auxwww | sed -n '1p; /PROCESS_NAME_TO_SEARCH/p;'

/sed -n/d;ছদ্মবেশী ফিল্টার যোগ করুন :

ps auxwww | sed -n '1p; /sed -n/d; /PROCESS_NAME_TO_SEARCH/p;'

/sed -n/dসঠিক নয়. কিছু বিদ্যমান কমান্ড থাকতে পারে sed -n, যা আপনি মুদ্রণ করতে চেয়েছিলেন। ট্রিক ব্যবহার করা হয় sed -n '1p; /[P]ROCESS_NAME_TO_SEARCH/p'। ;-) []অনুসন্ধান স্ট্রিংয়ের যে কোনও অক্ষরের চারপাশে নোট করুন ।
আনিসনে

4

সহজ বিকল্প: ps -ef | { head -1; grep GMC; }

আপনার শিরোনাম প্রদর্শিত লাইনের সংখ্যার সাথে নম্বরটি প্রতিস্থাপন করুন।


1
আমি এই পদ্ধতির পছন্দ করি তবে কমান্ডটির শেষে আরও একটি সেমিকোলন প্রয়োজন। ps -ef | { head -1; grep GMC; }। এছাড়াও আমি এটি নীচের মত একটি ফাংশনে পছন্দ করি:function pgrep() { ps -ef | { head -1; grep $@; } }
ব্রেট

1

আপনি pgrep দিয়ে পিড পেতে পারে

pgrep PNetTNetServer

এবং তারপরে পিডের সাথে পিএস ব্যবহার করুন

ps u 12345

অথবা এমনকি দুটি আদেশকে এক কমান্ডের সাথে সংযুক্ত করুন

ps u `pgrep PNetTNetServer`

এটি আপনার চাইলে কেবল রেখাটি প্রদর্শন করবে এবং এতে শিরোনাম অন্তর্ভুক্ত থাকবে।


0

আমি একটি ছোট পার্ল প্রোগ্রাম লিখেছি যা মুদ্রণ করবে

  • প্রথম লাইন এবং সমস্ত লাইন মিলছে, যদি কোনও মিল থাকে, বা
  • কিছুই না, যদি কোনও মিল নেই।

আমি প্রায়শই এটির মতো ব্যবহার করি ps | 1andre GMCতবে এটি ফাইল আর্গুমেন্টও নিতে পারে (প্রতিটি ফাইল সেই ফাইল থেকে লাইনগুলিতে তৈরি ম্যাচের জন্য নিজস্ব হেডার লাইন সরবরাহ করে)।



#!/usr/bin/perl

#
# 1andre <regexp> [<file> ...]
#
#   1 -           first ({1}st)
# and -                  {and}
#  re - (lines matching) {re}gexp
#
# If no <files> are given (or "-" is given as a <file>) stdin is
# used.
#
# If any lines from each <file> match the <regexp>, print the
# first line from that <file> and all the matching lines from
# that <file>.
#

use strict;
use warnings;

if(scalar @ARGV < 1) {
  printf STDERR "usage: %s <regexp> [<file> ...]\n", $0;
  exit 1;
}

my $re = shift;
my $header;

while(<>) {
  if($. == 1) {
    $header = $_;
  } elsif(m/$re/) {
    if(defined $header) {
      print $header;
      undef $header;
    }
    print;
  }
} continue {
  # close resets $. when we get to the end of each file that <> is processing
  close ARGV if eof;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.