Answers:
程序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