我不确定pidof
为什么无效,但是pgrep
有效。
$ pidof squid
returns nothing
$ pgrep squid
returns 3322
如何使用pidof
获得3322?
答案 0 :(得分:1)
pidof
将返回有关实际程序名称的详细信息,而pgrep
将返回有关与提供的模式匹配的任何进程的详细信息。这在两个工具的手册页中都有明确说明。
pidof [-s] [-c] [-n] [-x] [-m] [-o omitpid[,omitpid..]] [-o omitpid[,omitpid..]..] program [program..]
vs。
pgrep [options] pattern
当您寻找可执行文件squid
时,pgrep
可以匹配它,因为模式匹配/usr/bin/squid*
。 pidof
找不到名为squid
的程序,因为Squid守护程序可能被称为/usr/bin/squid-server
之类的东西。
例如,在这里,我查看ps
的输出,并在其中查找名称为systemd
的程序:
$ ps -eaf | grep systemd
root 1 0 0 Sep03 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 425 1 0 Sep03 ? 00:00:03 /usr/lib/systemd/systemd-journald
root 480 1 0 Sep03 ? 00:00:00 /usr/lib/systemd/systemd-udevd
dbus 630 1 0 Sep03 ? 00:00:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 648 1 0 Sep03 ? 00:00:00 /usr/lib/systemd/systemd-logind
pgrep
也可以找到它们:
$ pgrep -l systemd
1 systemd
425 systemd-journal
480 systemd-udevd
648 systemd-logind
但是pidof
只找到第一个:
$ pidof systemd
1
这是因为PID 1的名称为/usr/bin/systemd
。