ความแตกต่างระหว่าง pidof และ pgrep คืออะไร?


13

เมื่อฉันใช้คำสั่งเหล่านี้อย่างใดอย่างหนึ่งกับอาร์กิวเมนต์เป็นชื่อของกระบวนการพวกเขาทั้งสองกลับหมายเลขเดียวกันแน่นอน พวกเขาเป็นคำสั่งเดียวกันหรือไม่ พวกเขาสองคำสั่งต่างกันที่ทำสิ่งเดียวกัน เป็นหนึ่งในนั้นนามแฝงอื่น ๆ ?

pidof firefox
pgrep firefox

คำตอบ:


18

โปรแกรมpgrepและpidofไม่ใช่สิ่งเดียวกัน แต่คล้ายกันมาก ตัวอย่างเช่น:

$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1

อย่างที่คุณเห็นpidofไม่สามารถหาคู่ที่ตรงกัน[i]refได้ เพราะนี่คือผลตอบแทนที่รายการของรหัสกระบวนการทั้งหมดที่เกี่ยวข้องกับโปรแกรมที่เรียกว่าpidof program programบนมืออื่น ๆ ที่กลับรายการของรหัสกระบวนการทั้งหมดที่เกี่ยวข้องกับโปรแกรมที่มีชื่อตรงกับการแสดงออกปกติpgrep rere

ในรูปแบบพื้นฐานที่สุดความเท่ากันจริง:

$ 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

4

Fox ได้กล่าวไว้ว่าpgrepการค้นหาโดยใช้นิพจน์ทั่วไปในขณะที่pidofไม่แสดง

แต่pgrepยังมีตัวเลือกเพิ่มเติมมากมาย:

  • ด้วย-u "$UID"คุณสามารถจับคู่เฉพาะกระบวนการที่เป็นของผู้ใช้ปัจจุบัน
  • ด้วย--parentคุณสามารถค้นหากระบวนการลูกของกระบวนการที่กำหนด
  • คุณสามารถเลือก--oldestหรือ--newestกระบวนการที่ตรงกัน
  • ... และคนอื่น ๆ ที่ระบุไว้ในหน้าคน ...

มาดูกันว่าแต่ละแพ็คเกจนั้นเป็นของกระบวนการใด (บนระบบ apt):

$ dpkg -S "$(which pidof)"
sysvinit-utils: /bin/pidof

$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.