Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        2年前关闭。
                                                                                            
                
        
我不确定为什么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

10-02 14:42