เมื่อฉันใช้คำสั่งเหล่านี้อย่างใดอย่างหนึ่งกับอาร์กิวเมนต์เป็นชื่อของกระบวนการพวกเขาทั้งสองกลับหมายเลขเดียวกันแน่นอน พวกเขาเป็นคำสั่งเดียวกันหรือไม่ พวกเขาสองคำสั่งต่างกันที่ทำสิ่งเดียวกัน เป็นหนึ่งในนั้นนามแฝงอื่น ๆ ?
pidof firefox
pgrep firefox
เมื่อฉันใช้คำสั่งเหล่านี้อย่างใดอย่างหนึ่งกับอาร์กิวเมนต์เป็นชื่อของกระบวนการพวกเขาทั้งสองกลับหมายเลขเดียวกันแน่นอน พวกเขาเป็นคำสั่งเดียวกันหรือไม่ พวกเขาสองคำสั่งต่างกันที่ทำสิ่งเดียวกัน เป็นหนึ่งในนั้นนามแฝงอื่น ๆ ?
pidof firefox
pgrep firefox
คำตอบ:
โปรแกรม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
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