উত্তর:
প্রোগ্রামগুলি pgrepএবং pidofএকেবারে একই জিনিস নয় তবে তারা খুব মিল similar উদাহরণ স্বরূপ:
$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1
আপনি দেখতে পাচ্ছেন, এর pidofজন্য কোনও মিল খুঁজে পেতে ব্যর্থ হয়েছেন [i]ref। এটি কারণ হিসাবে pidof programপরিচিত একটি প্রোগ্রামের সাথে যুক্ত সমস্ত প্রক্রিয়া আইডির একটি তালিকা ফেরত দেয় program। অন্যদিকে, কোনও pgrep reপ্রোগ্রামের সাথে যুক্ত সমস্ত প্রক্রিয়া আইডির একটি তালিকা প্রত্যাবর্তন করে যার নাম নিয়মিত প্রকাশের সাথে মেলে re।
তাদের সর্বাধিক প্রাথমিক ফর্মগুলিতে সমতা আসলে:
$ pidof 'program'
$ pgrep '^program$'
আরও একটি দৃ concrete় উদাহরণ হিসাবে বিবেচনা করুন:
$ ps ax | grep '[w]atch'
12 ? S 0:04 [watchdog/0]
15 ? S 0:04 [watchdog/1]
33 ? S< 0:00 [watchdogd]
18451 pts/5 S+ 0:02 watch -n600 tail log-file
$ pgrep watch
12
15
33
18451
$ pidof watch
18451
ফক্স উল্লেখ করেছে যে pgrepনিয়মিত এক্সপ্রেশন ব্যবহার করে অনুসন্ধান করে, যখন pidofতা হয় না।
তবে pgrepআরও অনেক বিকল্প উপলব্ধ রয়েছে:
-u "$UID"কেবলমাত্র বর্তমান ব্যবহারকারীর অন্তর্ভুক্ত প্রক্রিয়াগুলি মেলে।--parentযদি আপনি একটি প্রদত্ত প্রক্রিয়ার চাইল্ড প্রসেস জানতে পারেন।--oldestবা নির্বাচন করতে পারেন --newest।আসুন জেনে নেওয়া যাক প্রতিটি প্রক্রিয়া কোন প্যাকেজের অন্তর্ভুক্ত (অ্যাপটি সিস্টেমে):
$ dpkg -S "$(which pidof)"
sysvinit-utils: /bin/pidof
$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep