কেন “পিএস অক্স | grep x "" pgrep x "এর চেয়ে ভাল ফলাফল দেয়?


82

আমি আমার উবুন্টুতে নিম্নলিখিত কমান্ডটি চেষ্টা করেছি, এটি কোনও জিনিস দেখায় না:

pgrep php5

এটি কি পিএইচপি 5 এর প্রক্রিয়া আইডিটি ফিরিয়ে আনবে না (যা নিম্নলিখিত আদেশটি কেবল এটি করে?):

ps aux | grep php5

সুতরাং, এই দুটি কমান্ডের মধ্যে পার্থক্য কি?

উত্তর:


75

ps auxসম্পূর্ণ কমান্ড লাইন (পথ এবং পরামিতি) অন্তর্ভুক্ত করে, যখন pgrep কেবল এক্সিকিউটেবলের নামের প্রথম 15 টি অক্ষর দেখায়

ps auxপ্রতিটি প্রক্রিয়াটির সম্পূর্ণ কমান্ড লাইন প্রদান করে, pgrepকেবলমাত্র এক্সিকিউটেবলের নাম দেখায়।

এর অর্থ হ'ল গ্রেপিং ps aux আউটপুট কোনও প্রক্রিয়াটির বাইনারি: যেমন `এর প্যারামিটারে ঘটে যাওয়া কোনও কিছুতেই মেলে`

  • ps aux | grep php5 মিলবে /usr/share/php5/i-am-a-perl-script.pl
  • কিন্তু pgrep php5না

আমার সিস্টেম থেকে একটি উদাহরণ নিন - কেবলমাত্র আমরা এর পরিবর্তে অজগর ব্যবহার করব php5:

  • ps aux | grep python আমাদের দেয়:
izx 2348 0.0 0.7 514928 15644? SL জুন 24:00 / ইউএসআর / বিন / পাইথন / ইউএসআর / লিবিব / unityক্য -লেন্স-ভিডিও / unity ক্য -লেন্স-ভিডিও
izx 2444 0.0 0.9 547392 18864? SL জুন ২৪:০ / / ইউএসআর / বিন / পাইথন / ইউএসআর / লিবিব / unityক্য -স্কোপ-ভিডিও-রিমোট / unity ক্য -স্কোপ-ভিডিও-রিমোট
রুট 2805 0.0 0.5 95436 12204? এস জুন24 0:00 / ইউএসআর / বিন / পাইথন / ইউএসআর / লিবিব / সিস্টেম-পরিষেবা / সিস্টেম-পরিষেবা-ডি
izx 6272 0.0 2.9 664400 60320? এসএনএল জুন ২৪:১:16 / ইউএসআর / বিন / পাইথন / ইউএসআর / বিন / আপডেট-ম্যানেজার - কোনও-ফোকাস-অন-ম্যাপ
রুট 11729 0.0 0.9 180508 19516? এস জুন 25 0 পাইথন / ইউএসআর / লিব / সফটওয়্যার-প্রোপার্টি / সফ্টওয়্যার-প্রোপার্টি-ডিবিস
  • তবে pgrep pythonকেবলমাত্র ফেরত আসে 11729, যা আপনি উপরের তালিকা থেকে দেখতে পাবেন:
রুট 11729 0.0 0.9 180508 19516? এস জুন 25 0 পাইথন / ইউএসআর / লিব / সফটওয়্যার-প্রোপার্টি / সফ্টওয়্যার-প্রোপার্টি-ডিবিস

3
"পিগ্রেপ-এল" প্রক্রিয়াটি 15 টি অক্ষরেও কেটে ফেলেছে, সম্ভবত এটি একটি বাগ তবে যুগ যুগ ধরে এটি ছিল
থারসন

1
আচ্ছা এটা 2008 এর হিসাবে একটি আপস্ট্রিম বাগ হিসাবে launchpad আছে :) "উপরে এবং PS আরোপ করা কমান্ড 15 অক্ষর" bugs.launchpad.net/ubuntu/+source/procps/+bug/295876
Thorsen

2
Hah, এই এটা ব্যাখ্যা করে, মন্তব্য # 3 থেকে: বাস্তবে দেখা যায় যে procs কিছু পদ্ধতি থেকে কমান্ড নাম পেতে কারণে /proc/<pid>/statকিন্তু থেকে/proc/<pid>/cmdline । ঠিক আছে, @ থারসন, আপনি বাগ স্প্রে জিতেছেন, এটি একটি বাগ: পি
ইশ

2
@xczzhh pgrepএকটি অযৌক্তিক আদেশ নয়। এটি ভাল এবং ডিজাইন হিসাবে কাজ করে। সমস্যাটি হ'ল আপনি যখন এটি চালাবেন তখন আপনি কোনও বিকল্প হারিয়েছিলেন, আপনি এর pgrepজন্য দোষ দিতে পারবেন না । ব্যবহার ps aux | grep xxxঅবিশ্বাস্য তাই grepআউটপুট থেকে নিজেকে ফিল্টার করতে হ্যাকের প্রয়োজন এবং এর মতো মিথ্যা ধনাত্মকতা দিতে পারে ps aux | grep root
jlliagre

1
এটি মাদকবিরোধী ব্যবসায়ের ক্ষেত্রে হওয়া উচিত, বাশ সরঞ্জামগুলির নির্মাতারা এলএসডিতে এতটাই জ্বলজ্বল করেছিলেন যে তারা ভেবেছিল যে এই জাতীয় জিনিসগুলি খুব ভালভাবে ডিজাইন করা হয়েছে
অ্যান্ডি রে

78

ps aux | grep xকমান্ড চেয়ে "better" বা ফলাফল দেয় pgrep xমূলত কারণ আপনার আধুনিক সঙ্গে একটি বিকল্প নাই।

সম্পূর্ণ কমান্ড লাইনটি অনুসন্ধান করার -fজন্য কেবল বিকল্পটি ব্যবহার করুন এবং কেবলমাত্র pgrepপ্রক্রিয়া নামটিই এটির ডিফল্ট আচরণ নয়, যেমন:

pgrep -f php5

যে ps | grepনির্মাণের সাথে আপনাকে grepলাইনটি ফিল্টার করতে বা প্যাটার্ন ট্রিকগুলি ব্যবহার করতে হবে তার বিপরীতে, pgrepনকশায় নিজেরাই বেছে নেবেন না।

তদুপরি, আপনার প্যাটার্নটি ps USERকলামে উপস্থিত হওয়া উচিত , আপনি আউটপুটে অযাচিত প্রক্রিয়াগুলি পাবেন, pgrepএই ত্রুটিটি ভুগবেন না।

আপনি যদি কেবল পিডের পরিবর্তে সম্পূর্ণ বিশদ চান তবে আপনি ব্যবহার করতে পারেন:

ps wup $(pgrep -f python)

যা সহজ এবং চেয়ে বেশি নির্ভরযোগ্য

ps aux | grep python | grep -v grep

অথবা

ps aux | grep p[y]thon

3
আপনি যদি পিড না দিয়ে পুরো কমান্ড লাইনটি দেখতে চান তবে -a( --list-full) বিকল্পটি যুক্ত করুন । (পুরাতন পিগ্রেপ কোনও ছিল না -a, এটি করেছিল-fl ))
বেনি চেরনিয়াভস্কি-পাসকিন

1
মূল প্রশ্নটি পার্থক্য সম্পর্কে জিজ্ঞাসা করছিল তবে এটি আসলে আমাদের pgrepসমাধানটি দুর্দান্ত সমাধানের জন্য চেষ্টা করার সুযোগ দেয় । +1
2rs2ts

@ 2rs2ts ধন্যবাদ, আমি জিজ্ঞাসিত প্রশ্নের উত্তর দিতে প্রকৃতপক্ষে অনুপস্থিত ছিলাম। এখনই স্থির।
jlliagre

কিছু ক্ষেত্রে যখন প্রোগ্রামগুলি /proc/self/cmdline"বর্ণনামূলক" হিসাবে পরিবর্তিত হয়, pgrep -fa rubyযেমন মেলে না। puma 3.3.0 (tcp://localhost:3000) [MIQ: Web Server Worker]যখন "ডাম্বার" pgrep -a rubyহবে। নিশ্চিত না যে পরবর্তীটি বোকাও হতে পারে কিনা।
বেনি চেরনিয়াভস্কি-পাসকিন

@ BeniCherniavsky-Paskin আমি যে প্রশ্ন একটি মন্তব্য হয়ে থাকতে পারে, যেহেতু এটি উভয় ক্ষেত্রে প্রযোজ্য pgrepএবং ps
ফ্রাঙ্কলিন ইউ

3
diff <(ps aux|grep x) <(pgrep x) # :)

12
এটি প্রশ্নের উত্তরের উত্তর দিতে পারে - তবে এই এক লাইনের কমান্ডটি কী করে তা বোঝাতে আপনি নিজের উত্তরটি প্রসারিত করতে পারেন।
ফসফ্রিডম

1

এই মুহুর্তে, পিগ্রিপ প্রথম 4,096 টি অক্ষরের মধ্যে সীমাবদ্ধ থাকার psচেয়ে আরও সম্পূর্ণ আউটপুট দেবে pgep -f(প্রায়শই জাভা ব্যবহারকারীদের দীর্ঘতর ক্লাসপথ সহ জাভা প্রোগ্রামের প্রবেশের শ্রেণীর সন্ধানে প্রভাবিত হয়)। বাগ ট্র্যাকিং এটি হ'ল: https://gitlab.com/procps-ng/procps/issues/86


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