pidof和pgrep之间的区别?

时间:2018-09-03 14:26:24

标签: linux shell command-line

我不确定pidof为什么无效,但是pgrep有效。

$ pidof squid       
returns nothing

$ pgrep squid
returns 3322

如何使用pidof获得3322?

1 个答案:

答案 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