PS ফলাফলগুলিতে প্রদর্শিত হওয়া থেকে আমি কীভাবে 'গ্রেপ' রোধ করতে পারি?


304

যখন আমি এমন কোনও প্রক্রিয়া অনুসন্ধান করি যা বিদ্যমান নেই, যেমন

$ ps aux | grep fnord                          
wayne    15745  0.0  0.0  13580   928 pts/6    S+   03:58   0:00 grep fnord

স্পষ্টতই আমি গ্রিপ সম্পর্কে চিন্তা করি না - এটি psপ্রক্রিয়াটির সন্ধানের মতো তাত্পর্যপূর্ণ !

আমি কীভাবে ফলাফলগুলিতে প্রদর্শিত হওয়া থেকে গ্রেপকে আটকাতে পারি?


28
আপনার যদি কোনও প্রক্রিয়ার কেবল পিআইডি দরকার হয় তবে আপনি (বা ) ps aux |grepদিয়ে প্রতিস্থাপন করতে পারেন । pgreppgrep -f
জোফেল

6
একই প্রশ্ন Serverfault এবং superuser
থোর

যে আউটপুট বৈধ? দেখে মনে হচ্ছে fnord নামে কোন প্রোগ্রাম চলছে না ...
acolyte

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

2
@ একলাইট এটি আশ্চর্য নয় যে আপনি "fnord" লাইনটি দেখতে পাচ্ছেন না। আপনি এটি দেখতে সক্ষম হবেন বলে মনে করা হচ্ছে না। আপনার যদি বাঁচার জন্য 2 বা 3 মিনিট সময় থাকে তবে এটি অনুসন্ধান করুন।
ফ্রান্সেসকো

উত্তর:


439

দেখা যাচ্ছে একটি সমাধান পাওয়া সম্ভব Keychain

$ ps aux | grep "[f]nord"

চিঠিটির চারপাশে বন্ধনী এবং রেজিক্সের সন্ধানের স্ট্রিংয়ের চারপাশে উদ্ধৃতি যুক্ত করে বলা হয়, "'নর্ড' এর পরে 'চ' অক্ষরটি সন্ধান করুন।"

তবে যেহেতু আপনি বন্ধনী 'f' ধরণে রেখেছেন এখন ']' এর পরে রয়েছে, সুতরাং grepফলাফলের তালিকায় প্রদর্শিত হবে না। Neato!


26
@ একলিট: পিএস থেকে আউটপুটটি শেষ হওয়া একটি লাইন অন্তর্ভুক্ত করবে grep [f]nord। যাইহোক, সেই লাইনটি গ্রেপ ফিল্টারের মাধ্যমে তৈরি করবে না, কারণ স্ট্রিংটি [f]nordনিয়মিত অভিব্যক্তির সাথে মেলে না [f]nord
LarsH

9
@ লার্শ আকর্ষণীয়, ধন্যবাদ! আমি পরামর্শ দিতাম ps aux | grep fnord | grep -v grep... যা ইতিমধ্যে কয়েকজন লোক পরামর্শ দিয়েছে বলে মনে হচ্ছে ... lol
acolyte

5
@ প্রোগো হ্যাঁ, আপনার [এমনকি এমনকি বাশগুলিতে উদ্ধৃতি দেওয়ার দরকার নেই । fnordবর্তমান ডিরেক্টরিতে ডাকা একটি ফাইল দিয়ে এটি ব্যবহার করে দেখুন ।
গিলস

25
এর আউটপুট গ্রিপিং psএকটি পুরানো কৌশল হতে পারে, কিন্তু এটি বিশ্বাসযোগ্য নয়। যদি পাওয়া যায় তবে ব্যবহার করুনpgrep
গিলস

8
@naxa কল্পনা করুন আপনার কাছে একটি প্রোগ্রাম কল fnordএবং একটি প্রোগ্রাম কল রয়েছে safnorde। অথবা সেখানে একজন ব্যবহারকারী বলা হয়েছে bfnordএবং আপনি তার সমস্ত প্রক্রিয়াটি শেষ করে দেবেন। ইত্যাদি
গিলস

163

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

pgrep fnord

8
তারা -fবিকল্পটি আরও পছন্দ করতে চাইবে ps | grep
jordanm

@ জোর্ডানম আসলে pgrep -fআরও দেখতে পাবেন ps -f | grep
michelpm

5
-lএটি যে কমান্ডটি মিলছে তা প্রদর্শন করার পক্ষেও যুক্তি রয়েছে।
প্যাট্রিক

15
ps | grep '[f]nord'চতুর এবং শ্রদ্ধেয়, কিন্তু pgrep সঠিক
কোজিরো

3
ps $(pgrep cmd) ...Always pgrep এর বিকল্পগুলি নিখোঁজ থাকলে আপনি সর্বদা করতে পারেন (যদিও এটি খালি কমান্ডগুলির সেট করার জন্য কাজ করবে না)।
ম্যাকিয়েজ পাইচোটকা

62

আদর্শ সমাধান হ'ল ব্রিজুয়ে উপস্থাপিত

pgrep fnord 

তবে আপনি যদি এটি না করতে চান তবে আপনি গ্রেপের সাথে মেলে এমন সমস্ত লাইন বাদ দিতে পারেন :

ps aux | grep -v grep | grep "fnord"

7
তবে আমি যে রেখাটি খুঁজছি তা যদি "বশ বাশ গ্রেপ বাশ" হয়?
স্পার

1
@ স্পার তারপরে আপনার সর্বোত্তম সমাধানটি ব্যবহার করা উচিত: pgrepবা অন্য একটি সন্ধান করুন;)
আরএসফালকন 7

Pgrep সহ নামের দৈর্ঘ্যের সীমাটি দেখুন। পুরো পাথের নাম পেতে -f ব্যবহার করুন অথবা আপনি আপনার মিলগুলি দীর্ঘ নাম দিয়ে ব্যর্থ হতে পারেন। -l ম্যাচগুলির তালিকা তৈরি করতে খুব সুন্দর
নীল ম্যাকগিল

25

সর্বাধিক মার্জিত সমাধান নয় তবে আপনি এটি করতে পারেন:

$ ps aux | grep fnord | grep -v grep


এটা খারাপ উত্তর! কারণ যদি grepআপনার বাক্যাংশে কোনও শব্দ থাকে। এটি সেই প্রক্রিয়াটি দেখায় না। উদাহরণস্বরূপ, ধরুন একটি ফাইল বলা কমান্ড foo_grep_bar.txtদ্বারা সম্পাদিত হচ্ছে nano। সুতরাং একটি প্রক্রিয়া চলছে: root 14908 0.0 0.0 110012 1692 pts / 3 S + Oct31 0:00 nano foo_grep_bar.txtএই উত্তর অনুসারে, এটি কাজ করবে না: $ ps aux | grep nano | grep -v grepকারণ আপনার ফাইলের নামটিতে একটি গ্রেপ শব্দ রয়েছে।
নবী KAZ

আমি স্বীকৃত উত্তরের চেয়ে এর উদ্দেশ্য সম্পর্কে এটি আরও স্পষ্ট হিসাবে পছন্দ করি এবং একটি ক্ষেত্রে ব্যতীত সমস্ত ক্ষেত্রে কাজ করে।
samaspin

1
অনুযায়ী superuser.com/a/409658/450260 আপনি সম্পূর্ণ ব্যতীত হওয়া উচিত grep fnordশুধু grepঅর্থাত $ ps aux | grep fnord | grep -v "grep fnord"
দাভোসে

15

Zsh এ grep fnord =(ps aux),।

ধারণাটি হ'ল, প্রথমে রান করুন ps aux, ফলাফলটি কোনও ফাইলে রাখুন, তারপরে grepসেই ফাইলটিতে ব্যবহার করুন। কেবলমাত্র, আমাদের কাছে কোনও ফাইল নেই, কারণ আমরা zsh এর "প্রক্রিয়া বিকল্প" ব্যবহার করি।

উদাহরণস্বরূপ, চেষ্টা করুন

ps aux > ps.txt
grep fnord ps.txt
rm ps.txt

ফলাফল একই হওয়া উচিত।

অন্যান্য উত্তরের কয়েকটি সম্পর্কে সাধারণ মন্তব্য । কিছু জটিল এবং / অথবা টাইপ করতে দীর্ঘ। এটি কেবল সঠিক হওয়ার বিষয় নয়, এটি ব্যবহারের জন্যও কার্যকর হওয়া উচিত। তবে এর অর্থ এই নয় যে সেগুলির কয়েকটি সমাধান খারাপ; কেবলমাত্র এগুলি ব্যবহারের যোগ্য করে তুলতে তাদের অবশ্যই একটি মিনি-ইউআইয়ের মধ্যে আবৃত থাকতে হবে।


1
Zsh এর প্রক্রিয়া প্রতিস্থাপন না জানা, তবে এটি কি নিশ্চিত যে দুটি প্রক্রিয়া একের পর এক বলা হয় এবং সমান্তরালে নয়?
পাওলো ইবারম্যান

3
@ PaŭloEbermann: সমান্তরাল জন্য <(command)grep grep =(ps aux)কোন লাইন দেখায় না
ম্যাকিয়েজ পাইচোটকা

জেডএস পিএস থেকে আউটপুট-ম্যাচও করতে পারে। print -l ${(M)${(f)¨$(ps aux)¨}:#*fnord*}
ফ্রিয়ারটেক

7
ps aux | grep $(echo fnord | sed "s/^\(.\)/[\1]/g")

3
এটি দেখতে আইওসিসি'র মতো, তবে ইউনিক্স কমান্ড লাইনের পরিবর্তে সি ^^ কেবল | grep $(echo fnord)যথেষ্ট ছিল না? আপনি সেডকে জিজ্ঞাসা করতে এবং প্রতিটি চরকে তার নিজস্ব মান দ্বারা "fnord" এ প্রতিস্থাপন করতে চান? gra সংকলন। আমি বাজি ধরলাম আমি আরও দীর্ঘতর কাজ করতে পারি তবে এটি সম্ভবত মজাদার be
অলিভিয়ার ডুলাক

1
আমার উপরের মন্তব্যের সুরটি আপত্তিকর বলে মনে হতে পারে বলে আমি ক্ষমা চাইছি (এবং আমি এটি 5 মিলিয়ন পরেও সম্পাদনা করতে পারি না) ... আপনার উত্তরটি সত্যিই একটি আনন্দদায়ক পড়া ছিল, এবং আমি আপনাকে খারাপ দেখানোর চেষ্টা করছিলাম না। আমি সত্যিই মনে করি আপনি এটি উদ্দেশ্য হিসাবে এটি করেছেন ^^
অলিভিয়ার ডুলাক

1
ক্ষমা চাইবেন না, আপনার উত্তরটি পড়তে সত্যিই মজাদার ছিল (এবং ডানদিকেও স্পট-অন)। আমার অর্থ পিগ্রিপ-এল $ 1 যাইহোক;)
yPhil

3
@ অলিভিয়ারডুলাক: তিনি কেবল প্রথম চরটিকে নিজের মূল্য দিয়ে প্রতিস্থাপন করেন না; বর্গাকার বন্ধনীগুলির মধ্যে এটির মানকে একত্রিত করে তিনি প্রতিস্থাপন করেন। (এই বর্গাকার বন্ধনীগুলি বিশেষ নয়, সেগুলি আক্ষরিক)) মূলত, তিনি ওয়েন ওয়ার্নারের উত্তরটির উপর সাধারণীকরণ করছেন, যাতে প্রথম চরিত্রের চারপাশে বর্গাকার বন্ধনী রাখার প্রক্রিয়াটি স্ক্রিপ্ট করা যায়। +1
LarsH

2
ps aux | grep '[^]]fnord'যে জিমন্যাস্টিক এড়ানো হবে।
স্টাফেন চেজেলাস

6

এই উত্তরটি জিএনইউ-নির্দিষ্ট । আরও সাধারণ সমাধানের জন্য ওয়েনের উত্তর দেখুন ।

প্রক্রিয়াগুলির জন্য অনুসন্ধান করা হচ্ছে

আপনি যদি কেবলমাত্র fnordপ্রক্রিয়াগুলি সন্ধান করেন তবে আপনি -Cকমান্ড নাম দ্বারা নির্বাচন করতে বিকল্পটি ব্যবহার করতে পারেন :

ps -C fnord

এটি আপনার পছন্দ অনুসারে BSD- এবং POSIX- স্টাইল বিন্যাস বিকল্পগুলির সাথে মিশ্রিত করা যেতে পারে। সম্পূর্ণ তালিকার জন্য পিএস ম্যান পৃষ্ঠাটি দেখুন ।

অন্য কিছু খুঁজছেন?

আপনার যদি কমান্ডের নামের সন্ধানের জন্য সঠিক অনুসন্ধানের চেয়ে আরও কিছু উন্নতমানের প্রয়োজন হয় তবে আশা ছেড়ে দিন না! এটি এখনও psপাইপের পাশে করা যেতে পারে । আমাদের যা করতে হবে তা হল ফলাফল থেকে প্রক্রিয়াগুলি psবাদ দিতে grep:

ps -NC grep | grep 'fnord'

-C grepসমস্ত গ্রেপ প্রক্রিয়াগুলি -Nনির্বাচন করে এবং নির্বাচনটিকে তুচ্ছ করে। এটি কমান্ড আর্গুমেন্ট, কমান্ড নামের অংশ, বা আরও জটিল নিয়মিত এক্সপ্রেশনগুলির জন্য অনুসন্ধান করতে ব্যবহৃত হতে পারে।


1
এটি জিএনইউতে ভাল psতবে -Cপসিক্স দ্বারা নির্দিষ্ট করা হয়নি এবং বিএসডি
এরিক রেনোফ

এটি সত্যই কোনও বিএমডি সমতুল্য নয় (যার অর্থ এটি ম্যাকের সাথে কাজ করবে না)। পিএস-সি ব্যবহার করা এগুলির যে কোনও একটিরও সহজ উত্তর।
ক্রিস্টোফার হান্টার

3

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

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

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

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

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

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

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
}

2

এটি করার সহজ শেল-অজনস্টিক উপায় হ'ল প্রথমে এটি একটি ভেরিয়েবলের মধ্যে সংরক্ষণ করা:

PS_OUTPUT="$(ps aux)"; echo "$PS_OUTPUT" |grep fnord

কল আউট: @ ইমানুয়েলবার্গের grep fnord =(ps aux)উত্তরটি এখন পর্যন্ত সবচেয়ে মার্জিত, যদিও এটি প্রয়োজন zsh। আমি আমার আরসি ফাইলগুলিতে সংক্ষেপে এটি রেখেছিলাম, তবে বাশ শর্তসাপেক্ষেও এই সিনট্যাক্স সম্পর্কে অভিযোগ করে যা এর মূল্যায়ন আটকাতে পারে prevent


আমার আরসি ফাইলগুলি থেকে, আমার কাছে কেস-সংবেদনশীল সংস্করণ রয়েছে যা গ্রেপের আরগস গ্রহণ করে:

psl() {
  local PS_OUTPUT="$(ps auxww)"
  echo "${PS_OUTPUT%%$'\n'*}" >&2  # title, in stderr to avoid pipes
  echo "${PS_OUTPUT#*$'\n'}" |grep -i "${@:-^}"
}

কোড ওয়াক, কোডের প্রতিটি লাইনে একটি বুলেট:

  • ভার্বোজ psআউটপুট ক্যাপচার করুন (একটি localপরিবর্তনশীল যাতে ফাংশন ফিরে আসার পরে এটি চলে যায়)
  • স্ট্যান্ডার্ড ত্রুটিতে প্রথম লাইন (শিরোনাম) প্রদর্শন করুন যাতে শিরোনামকে প্রভাবিত না করে ফলাফল আরও ফিল্টার করা যায়। প্রতিস্থাপনে বলা হয়েছে: $PS_OUTPUTপ্রথম লাইন ফিডের পরে সমস্ত কিছু নিয়ে যান এবং সরান (রিজেক্স সমতুল্য s/\n.*$//msg)। এটি আমাদের শিরোনাম গ্রেপিং থেকে বাধা দেয়
  • প্রথম লাইন (রেজেক্স সমতুল্য ) ব্যতীত সমস্ত psকিছুর সাথে আউটপুট প্রদর্শন করুন এবং এর বিষয়বস্তুগুলি কেস-সংবেদনশীল এবং সমস্ত আর্গুমেন্টের সাহায্যে গ্রেপ করুন (কোনও আর্গুমেন্টের ক্ষেত্রে নয় , যা কোনও লাইন শুরুর সাথে মেলে সবকিছু)s/^.*\n//m-i^

1

সম্ভবত এবার আসল ক্রম ব্যবহার করার সময় use পাইপের ব্যবহার এটি সমান্তরাল করে তোলে।

ps aux >f && grep tmpfs <f

কুরুচিপূর্ণ কারণ একটি ফাইল থাকবে f, তবে এটি আমার দোষ নয় যে ক্রমবর্ধমান প্রক্রিয়াগুলির জন্য এমন কোনও সিনট্যাক্স নেই যেখানে আপনি এখনও পূর্বের রান প্রক্রিয়াটির আউটপুট ব্যবহার করতে চান।

অনুক্রমের অপারেটরের সিনট্যাক্সের জন্য পরামর্শ:

ps aux ||| grep tmpfs

সাধারণ মানুষ সহজেই কোনও স্ট্রিম ফিল্টার করতে অক্ষমতা অভিজাতদের সিক্যুয়েন্সগুলির সাথে নিজেদের ভিত্তি স্থাপনের পক্ষে খুব কমই কারণ ছিল। এটি কম্পিউটিংয়ে এক ধাপ পিছিয়ে থাকবে।
একিউম্যানাস

@ABB en.wikipedia.org/wiki/Communicating_sequential_processes ঐ যে থম্পসন শেল শেষ পর্যন্ত অনেক বেশী অপারেটার আছে। সবেমাত্র এমন একটি অপারেটর থাকতে পারত যা অনুক্রমিক এবং এটি তার ফলাফলটি পরবর্তী প্রসেসে এটির প্রস্থান করার সাথে সাথেই পরবর্তী ক্রিয়ায় পৌঁছে দেয়। অতিরিক্ত অপারেটর সরবরাহ করে "কম্পিউটিংয়ে একটি পদক্ষেপ পিছনে" কিছুটা কঠোর বলে মনে হয়।
অ্যান ভ্যান রসম

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

0

Pgrep কমান্ড, অন্যরা যেমন বলেছে, নাম এবং অন্যান্য বৈশিষ্ট্যের উপর ভিত্তি করে প্রক্রিয়াগুলির পিআইডি (প্রসেস আইডি) ফিরিয়ে দেবে। উদাহরণ স্বরূপ,

pgrep -d, -u <username> <string>

যাদের নাম মেলে ব্যবহারকারী দ্বারা পরিচালিত হচ্ছে সমস্ত প্রসেসের কমা (,) দ্বারা বিস্মৃত পিআইডি আপনাকে দেবে <username>। আপনি কেবল সঠিক ম্যাচগুলি ফিরতে আগে -x সুইচ ব্যবহার করতে পারেন।

যদি আপনি এই প্রক্রিয়াগুলি সম্পর্কে আরও তথ্য পেতে চান (যেমন পিএস থেকে অক্স বিকল্পগুলি চালিত করা হয়), আপনি পি-পি-র সাথে মেলে যা-পি-পি বিকল্পটি ব্যবহার করতে পারেন। সুতরাং, উদাহরণস্বরূপ,

ps up $(pgrep -d, -u <username> <string>)

pgrep কমান্ডের সাথে মিলে সমস্ত পিআইডি সম্পর্কিত বিশদ তথ্য দেবে।


psযদি pgrepএকটি খালি সেট দেয় তবে ব্যর্থ হয় । আমার একটি উত্তর আছে যা আপনার উপর ভিত্তি করে তৈরি করে এবং এই সমস্যাটি সমাধান করার চেষ্টা করে।
একিউম্যানাস

0

প্রক্রিয়াটির নিজের ssh-agentপিআইডি না দেখিয়ে ব্যবহারকারীর জন্য পিআইডি সন্ধানের জন্য এখানে একটি সাধারণ উদাহরণ রয়েছে grep:

ps xu | grep "${USER}.*[ ]/usr/bin/ssh-agent" | awk '{print $1 $2;}'

আপনি যদি ssh-agentবর্তমান ব্যবহারকারীর জন্য উদাহরণস্বরূপ হত্যা করতে চান তবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

kill `ps xu | grep "${USER}.*[ ]/usr/bin/ssh-agent" | awk '{print $2;}'`

আপনার alias / .bashrc বা ~ / .zshrc ফাইলটিতে একটি সহজ উপায়ে তৈরি করতে নিম্নলিখিত কোডটি যুক্ত করুন:

function function1 () {
    ps xu | grep "$1.*$2" | awk '{print $1" "$2" "$11;}'
}
alias mygrep="function1"

এবং উপনামটি ব্যবহার করার জন্য এখানে প্রত্যেককে নিয়মিত অভিব্যক্তি শিখতে বাধ্য করার উদাহরণ রয়েছে:

. /etc/profile #to make alias usable
mygrep ${USER} ${PROCESS_PATH}
mygrep ${USER} "[f]nord"
mygrep "[f]nord"
mygrep ".*[s]shd"

PS আমি কেবল উবুন্টু এবং জেন্টুতে এই আদেশগুলি পরীক্ষা করেছি।


(1) প্রশ্নটি বলছে না যে ব্যবহারকারী তার নিজস্ব একটি প্রক্রিয়া সন্ধান করছে - ব্যবহারকারী সম্ভবত যে প্রক্রিয়াটি অনুসন্ধান করছেন তার মালিককে তা চেনে না। (২) এই উত্তরটি যেমন অভিনব, তবুও আপনি যদি বলতেন তবে এটি ব্যর্থ হয় "${USER}.* /usr/bin/ssh-agent"। এটি কাজ করে কারণ আপনি বলেছেন [ ]; যেমন, আপনি কেবল গৃহীত উত্তরের প্রক্রিয়াটি ব্যবহার করছেন। আপনি পাশাপাশি ভাল হতে পারে grep "[s]sh-agent"
জি ম্যান

তুমি ঠিক. (1) আমি একবারে এই পৃষ্ঠার মুখোমুখি হতে পেলাম দরকারী কি হতে পারে তা আমি শেয়ার করেছি (২) হ্যাঁ আমি স্বীকৃত উত্তরের হিসাবে নিয়মিত প্রকাশ প্রকাশ করেছি। (3) আমি আমার উত্তরটি যেমনটি উত্তম হিসাবে গ্রহণ করা হয় তেমন একই হিসাবে আপডেট করেছিলাম, তবে আমি কীভাবে ব্যবহারকারীর নাম দিয়ে বা এটি ব্যবহার না করে কীভাবে ব্যবহার করতে পারি এবং কীভাবে ওরফে তৈরি করতে পারি তাও আমি দেখিয়েছি। (4) এছাড়াও কীভাবে ফাংশনটি সংজ্ঞায়িত করা যায় তা দেখানো হয়েছে, যদিও এটি প্রয়োজনীয় নয় তবে আকর্ষণীয় উপায়ে কাজ করে কারণ $ 1 এবং $ 2 ওভারল্যাপ হয় না। থেক্স # জি-ম্যান
কনস্টান্টিন জাগারস্কি

-1

আপনি নিজের .bashrc মতো করে একটি ALIAS সংজ্ঞায়িত করে এটি সহজেই করতে পারেন :

alias grep='grep -v grep | grep'

কারা নিচে ভোট দিয়েছে বা কেন তা নিশ্চিত নয় তবে এটি আপনাকে পিএসের সম্পূর্ণ ব্যবহার করতে দেয় যা পিগ্রেপ দেয় না।
অপ্টিসাইক্লিক

কেবল এটিই নয় যে অজান্তেই অন্যান্য গ্রেপ প্রক্রিয়াগুলি বাদ দেয়; এটি grepঅন্যান্য ক্ষেত্রে ব্যবহারও ভেঙে দেয় । ব্যবহার করে দেখুন echo I love grep | grep love
21:54

@ ট্রসোস প্রায় ১১ বছর আমি * নিক্স-ইঙ্গিত হয়েছি .. এবং কখনও কখনও সে ধাঁচটি ব্যবহার করি নি ... সম্ভবত আগামী বছর যদিও - কে জানে।
a20

-1

-X (নির্ভুল ম্যাচ) বিকল্পটি ব্যবহার করা আমার পক্ষে কাজ করেছিল। আমি এটি -f (সম্পূর্ণ কমান্ড লাইন) এর সাথে সংযুক্ত করেছি, তাই আমি আমার প্রক্রিয়াটির সাথে এইটির সাথে সঠিকভাবে মেলে ধরতে পারি:

pgrep -x -f "path_i_used_when_starting/cmd params_i_used"

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