কীভাবে "পিএস" এর নিজস্ব প্রক্রিয়াটি প্রতিবেদন করা যায়?


52
$ ps | grep django
28006 ttys004    0:01.12 /usr/bin/python bin/django celeryd --beat
51393 ttys005    0:01.45 /usr/bin/python bin/django celeryd -l INFO
51472 ttys005    0:01.29 /usr/bin/python bin/django celeryd -l INFO
51510 ttys005    0:01.89 /usr/bin/python bin/django celeryd -l INFO
51801 ttys005    0:01.83 /usr/bin/python bin/django celeryd -l INFO
53470 ttys005    0:03.97 /usr/bin/python bin/django celeryd -l INFO
53780 ttys005    0:00.00 grep django

সর্বশেষ প্রক্রিয়াটি রোধ করার কোনও উপায় আছে (যা আমার পিএস কমান্ডের সাথে সাথে গ্রেপটি শুরু হয়েছিল) রিপোর্ট করা হচ্ছে?

(আমি এমন একটি রেইজেক্স নিয়ে আসার চেষ্টা শুরু করি যা আক্ষরিক সাথে মেলে তবে নিজের সাথে মেলে না, তবে মনে হয়েছিল, ওম, সঠিক পদ্ধতির সাথে নয় ...)

উত্তর:


14

আমার উত্তরটি psতালিকার "ফুবার" অনুসন্ধানের জন্য সাধারণ উত্তরের একটি প্রকরণ । আমার যুক্তিটির "-A" "ps"চেয়ে যুক্তি আরও বহনযোগ্য "aux", তবে এই পরিবর্তনটি উত্তরের সাথে অপ্রাসঙ্গিক। সাধারণ উত্তরটি এর মতো দেখাচ্ছে:

$ ps -A -ww | grep [f]oobar

পরিবর্তে আমি এই প্যাটার্নটি ব্যবহার করি:

$ ps -A -ww | grep [^]]foobar

মূল সুবিধাটি হ'ল এই নিদর্শনগুলির উপর ভিত্তি করে স্ক্রিপ্টগুলি লেখার পক্ষে সহজ কারণ আপনি যেই প্যাটার্নটি সন্ধান করছেন তার সাথে আপনি কেবল একটি স্ট্যাটিক স্ট্রিংকে সম্মতিযুক্ত করেন [^]]। আপনার স্ট্রিংয়ের প্রথম অক্ষরটি সরিয়ে ফেলার দরকার নেই তারপরে এটিকে বর্গাকার ধনুর্বন্ধনীগুলির মধ্যে সন্নিবেশ করানো হবে এবং তারপরে আবার এটি এক সাথে যুক্ত করতে হবে। শেলটিতে স্ক্রিপ্ট করার সময় আপনি [^]]যে প্যাটার্নটির জন্য সন্ধানী ছিলেন তার সামনে কেবল আঁকানো সহজ। বাশে স্ট্রিং স্লাইসিং একটি কুরুচিপূর্ণ জিনিস, তাই আমার প্রকরণটি এড়ানো যায়। এই প্রকরণটি বলছে যে প্যাটার্নগুলি শীর্ষস্থানীয় ডান-স্কোয়ার-বন্ধনী ব্যতীত প্যাটার্নগুলির সাথে মেলে সেগুলি প্রদর্শন করুন] যেহেতু একটি বর্গাকার বন্ধনী বাদ দেওয়ার জন্য অনুসন্ধান প্যাটার্নটি প্রকৃতপক্ষে বর্গাকার বন্ধনীটিকে প্যাটার্নে যুক্ত করে তাই এটি কখনই নিজের সাথে মেলে না।

সুতরাং আপনি psgrepনিম্নলিখিত হিসাবে একটি পোর্টেবল কমান্ড লিখতে পারে । এখানে আমি লিনাক্স, ওএস এক্স বিএসডি এবং অন্যদের মধ্যে পার্থক্যের জন্য কিছু ভাতা দিচ্ছি। এটি কলামের শিরোনামগুলি যোগ করে ps, আরও কাস্টম সরবরাহ করেpsফর্ম্যাট যা আমার প্রয়োজন ভাল বেতার জন্য উপযুক্ত, এবং অতিরিক্ত, অতিরিক্ত প্রশস্ত তালিকা প্রক্রিয়াকরণ প্রদর্শন করে যাতে কমান্ড-লাইন আর্গুমেন্টগুলির কোনওটিই মিস না হয়। ভাল, বেশিরভাগই মিস হয় না। জাভা হচ্ছে জাভা, এটি প্রায়শই খারাপতম উপায়ে জিনিসগুলি করে, সুতরাং আপনি কিছু জাভা পরিষেবাগুলি সর্বাধিক অনুমোদিত আর্গুমেন্টগুলির প্রসারণ করতে পারবেন যা প্রক্রিয়া সারণীটি ট্র্যাক করে রাখবে। আমি বিশ্বাস করি এটি 1024 টি অক্ষর। কোনও প্রক্রিয়া শুরু করার অনুমতি দেওয়া কমান্ড-লোন দৈর্ঘ্য অনেক দীর্ঘ, তবে কার্নেল প্রক্রিয়া সারণী দৈর্ঘ্যে 1K এর বেশি কোনও কিছুর ট্র্যাক রাখতে বিরক্ত করে না। কমান্ডটি শুরু হয়ে গেলে কমান্ড-নাম এবং যুক্তির তালিকার বিপরীতে প্রয়োজন হয় না, তাই প্রক্রিয়া সারণীতে কী সংরক্ষণ করা হয় তা কেবল তথ্যগত।

psgrep ()
{
    pattern=[^]]${1};
    case "$(uname -s)" in
        Darwin)
            ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
        ;;
        Linux)
            ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
        ;;
        *)  # other UNIX flavors get a minimalist version.
            ps -A -ww | grep -i -e ${pattern}
        ;;
    esac
}

অসুবিধাটি হ'ল এটি প্রকৃত প্যাটার্নের চেয়ে আরও একটি চরের সাথে (সামনের দিকে) মিলবে। উদাহরণস্বরূপ, এটি কখনও পিআইডি-র সাথে মেলে না। এবং এটি ব্যবহার করার সময় কিছুটা বিভ্রান্তিকর হতে পারে grep --colour
টোনিন

67

@ জ্যামজেড টর্স উত্তরের জন্য +1, তবে ওপিকে কিছু ব্যাখ্যা দরকার হতে পারে:

ps | grep "[d]jango"

এই রেজেক্সটি ব্যবহার করে আপনি এমন একটি প্রক্রিয়া চালু করছেন যা এর পিএস স্ট্রিংটি নিজের সাথে মেলে না, যেহেতু রেজিএক্সএক্স মিলছে "django"এবং না "[d]jango"। এইভাবে আপনি "[d] জাঙ্গো" স্ট্রিং রয়েছে এমন প্রক্রিয়াটি বাদ দিন যা এই ক্ষেত্রে গ্রেপ; একইটি পিগ্রেপ, এগ্রিপ, অ্যাজক, সেড ইত্যাদি প্রয়োগ করা যেতে পারে ... আপনি যে কমান্ডটি রেজেক্সকে সংজ্ঞায়িত করার জন্য ব্যবহার করেছেন।

ম্যান 7 রেজেক্স থেকে

   A bracket expression is a list of characters enclosed in "[]".  It nor‐
   mally matches any single character from the list (but see  below).   If
   the  list  begins  with  '^',  it matches any single character (but see
   below) not from the rest of the list.  If two characters  in  the  list
   are  separated  by '-', this is shorthand for the full range of charac‐
   ters between those two (inclusive) in the collating sequence, for exam‐
   ple,  "[0-9]" in ASCII matches any decimal digit.  It is illegal(!) for
   two ranges to share an endpoint, for example, "a-c-e".  Ranges are very
   collating-sequence-dependent,  and portable programs should avoid rely‐
   ing on them.

2
কুল। আমি প্রকৃতপক্ষে রেগেক্সগুলির সাথে বেশ আরামদায়ক কিন্তু অবিলম্বে নিজেকে রেজিপেক্সের সাথে মিলে যাওয়া রোধ করার কোনও উপায়ের কথা ভাবতে পারি না। বর্গাকার বন্ধনীগুলিতে একটি চিঠিটি যুক্ত করা সঠিক ধারণা দেয় sense ([^!] এর মতো কিছু অন্তর্ভুক্ত করেও কাজ করবে ...)
স্টিভ বেনেট

1
এটা দুর্দান্ত এবং কৃপণ।
ছাই

'পিএস' নির্দিষ্ট ক্ষেত্রে, আমি যে প্রক্রিয়াটির সন্ধান করছি তার সামনের দিকে '[]' ব্যবহার করি। তারপরে রেগেক্সের জন্য প্রক্রিয়াটির নামটি বিশেষভাবে পার্স করার দরকার নেই, তবে এটি এখনও মেলে।
নেরোমান্সার

@hmontoliu এটা উদাহরণস্বরূপ কাজ করে না: ps aux | grep [s]cript1। আপনি সমাধান সম্পর্কে মন্তব্য করতে সাহায্য করতে পারেন?
সাউসার

@hmontoliu আমার দোষ পূর্ববর্তী অনুসন্ধানগুলির কারণে লাইনটি প্রদর্শিত হয়েছে বলে মনে হচ্ছে ...
সাউসার

30

ps | grep [d]jango

ps | grep d[j]ango

...

ps | grep djang[o]


আপনার যদি একটি ps aux| grep "[Z] "
এডি

@ জ্যামজেড এটি উদাহরণস্বরূপ কাজ করে না: ps aux | grep [s]cript1বা ps aux | grep [s]cript2। গ্রেপ লাইন এখনও প্রদর্শিত হয়। আপনি সমাধান সম্পর্কে মন্তব্য করতে সাহায্য করতে পারেন?
সাউসার

@ জামেজেড আমার দোষ পূর্ববর্তী অনুসন্ধানগুলির কারণে লাইনটি প্রদর্শিত হয়েছে বলে মনে হচ্ছে ...
সাউসার

18

পরিবর্তে pgrep ব্যবহার করুন: pgrep -lf django


যথারীতি আমি প্ল্যাটফর্মটি উল্লেখ করতে ভুলে গেছি (এই ক্ষেত্রে ওএস এক্স)। সম্ভবত pgrep বিভিন্ন লিনাক্সে কাজ করে।
স্টিভ বেনেট

আমি একমত নই, @ আরমরুমা। আমি pgrepঠিক এই থ্রেডে এসেছি কারণ আমাকে ঠিক এই সমস্যা দেয়। তবে আমি অবশ্যই বলব যে আমি এটি সাইগওয়িনে পরীক্ষা করছি (যেখানে psপ্রক্রিয়াটির সম্পূর্ণ কমান্ড লাইনটি প্রদর্শন করা যায় না)।
সোপালাজো ডি অ্যারিরিজ

ম্যানুয়ালটিতে বলা হয়েছে "চলমান পিগ্রিপ বা পিকিল প্রক্রিয়া কখনই নিজেকে ম্যাচ হিসাবে প্রতিবেদন করবে না" "এবং সত্যই আমি এটি করতে দেখিনি।
ডেলটাব

আমি সবেমাত্র একটি সমস্যার মুখোমুখি হয়েছি যেখানে আমার মনে pgrepহয়েছিল যে এটি নিজের সাথে মেলে। দেখা যাচ্ছে এটি bashস্ক্রিপ্ট ফাইলটির নামের সাথে মেলে যা আমি এটি থেকে চালাচ্ছিলাম। যোগ করার পদ্ধতি -xএটি সংশোধন করা হয়েছে, তাহলে এটি কমান্ড নামের উপর একটি সঠিক ম্যাচ আছে।
andynormancx

11

ওহ অপেক্ষা করুন, এটি কাজ করে:

ps | grep django | grep -v grep

7
কেবলমাত্র যদি প্রক্রিয়া কমান্ড লাইন বৈধভাবে অন্তর্ভুক্ত না করে grep, যা আপনি সাধারণ ক্ষেত্রে গণনা করতে পারবেন না।
একটি সিভিএন

8

ps -d | grep django

মানুষ থেকে পিএস:

 -d                  Lists information  about  all  processes
                     except session leaders.

এখনও আমার উপর গ্রেপ দেখায় ...
কেভিন

হ্যাঁ, ওএস এক্সে আমার জন্য এটি কাজ করে
স্টিভ বেনেট

লিনাক্স এ এত ভাল কাজ করে না।
একিউম্যানাস

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

মজার বিষয়, ম্যাকের জন্য এটি কেবল গ্রেপ প্রক্রিয়াটি দেখায় এবং সমস্ত কিছু ফিল্টার করে।
ক্রিস্টোফার হান্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.