我不知道为什么pidof
不起作用,但是pgrep
作品。
$ pidof squid
returns nothing
$ pgrep squid
returns 3322
如何使用 pidof
获取 3322 ?
最佳答案
pidof
将返回有关实际程序名称的详细信息,而 pgrep
将返回有关与所提供模式匹配的任何进程的详细信息。这在两个工具的手册页中都有明确说明。
pidof [-s] [-c] [-n] [-x] [-m] [-o omitpid[,omitpid..]] [-o omitpid[,omitpid..]..] program [program..]
对比
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
。
关于linux - pidof 和 pgrep 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52151698/