Yanıtlar:
Programlar pgrep
ve pidof
aynı şey değil, ama çok benzerler. Örneğin:
$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1
Gördüğünüz gibi, pidof
için bir eşleşme bulunamadı [i]ref
. Bunun nedeni pidof program
, çağrılan bir programla ilişkili tüm işlem kimliklerinin bir listesini döndürmesidir program
. Öte yandan, pgrep re
adı normal ifadeyle eşleşen bir programla ilişkili tüm işlem kimliklerinin bir listesini döndürür re
.
En temel formlarında, denklik aslında:
$ pidof 'program'
$ pgrep '^program$'
Yine somut bir örnek olarak, şunları göz önünde bulundurun:
$ 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
düzenli ifadeler kullanarak arama yaparken pidof
bunu söylemedi.
Ama pgrep
aynı zamanda çok daha fazla seçenek var:
-u "$UID"
yalnızca geçerli kullanıcıya ait işlemleri eşleştirebilirsiniz.--parent
size verilen bir sürecin alt işlemler bulabilirsiniz.--oldest
veya seçebilirsiniz --newest
.Her sürecin hangi pakete ait olduğunu bulalım (apt sistemlerinde):
$ dpkg -S "$(which pidof)"
sysvinit-utils: /bin/pidof
$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep