linux - pidof 和 pgrep 之间的区别?

标签 linux shell command-line

我不知道为什么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/

相关文章:

linux - 使用 hexdump 仅输出 ASCII

python - 从 Python 程序的 docker 容器中获取主机名

amazon-web-services - AWS 在创建 Alexa 技能时无法创建和更新堆栈(主动事件 API)

.net - .NET 4.0 的 shell 扩展

c++ - 通过 Windows 命令行,我们如何编译 Netbeans C/C++ 应用程序?

mysql - 如何在 debian 中安装 mysql-server :buster using script without being asked any configuration questions?

php - 如何同时运行两个php文件?一个在背景中,另一个在前景中

python - 有没有办法获取目录中 N 个最旧的文件名而不获取所有文件名(在 python 或 shell 中首选)

command-line - 如何为 shell 命令设置环境变量

performance - 提高Grails命令行性能