回答:
プログラムpgrep
とpidof
はまったく同じものではありませんが、非常に似ています。例えば:
$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1
ご覧のとおりpidof
、の一致が見つかりませんでした[i]ref
。これはpidof program
、というプログラムに関連付けられているすべてのプロセスIDのリストを返すためprogram
です。一方、pgrep re
名前が正規表現に一致するプログラムに関連付けられているすべてのプロセスIDのリストを返します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