উত্তর:
প্রোগ্রামগুলি 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