जवाबों:
कार्यक्रम pgrepऔर pidofएक ही चीज नहीं हैं, लेकिन वे बहुत समान हैं। उदाहरण के लिए:
$ 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$'
एक और ठोस उदाहरण के रूप में, विचार करें:
$ 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