pidofとpgrepの違いは何ですか?


12

これらのコマンドのいずれかを引数としてプロセスの名前として使用すると、どちらも正確に同じ番号を返します。それらは同じコマンドですか?それらは同じことをする2つの異なるコマンドですか?それらの1つは他のエイリアスですか?

pidof firefox
pgrep firefox

回答:


18

プログラムpgreppidofはまったく同じものではありませんが、非常に似ています。例えば:

$ 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

3

Foxはpgrep、正規表現を使用した検索については言及してpidofいませんが、そうではありません。

しかしpgrep、さらに多くのオプションが利用可能です:

  • を使用-u "$UID"すると、現在のユーザーに属するプロセスのみを照合できます。
  • を使用--parentすると、特定のプロセスの子プロセスを見つけることができます。
  • --oldestまたは--newestの一致するプロセスを選択できます。
  • ...そしてmanページにリストされている他の様々な...

各プロセスがどのパッケージに属しているかを調べましょう(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.