Grep

為什麼 pidof 和 pgrep 的行為不同?

  • June 5, 2016

我有一個初始化腳本/etc/init.d/myservice用於初始化這樣的服務:

...
start() {
 ...
 daemon /usr/sbin/myservice
 ...
}

stop() {
 ...
 pgrep myservice
 pidof myservice
 ps -ef | grep myservice
 ...
}

當我嘗試停止服務時,這是輸出:

10000 10001
10000
root      10000     1  0 09:52 ?        00:00:02 /usr/sbin/myservice
root      9791   9788  0 10:06 pts/1    00:00:00 /bin/sh /sbin/service myservice stop
root      10001  9791  1 10:06 pts/1    00:00:00 /bin/sh /etc/init.d/myservice stop 
root      9805   9796  0 10:06 pts/1    00:00:00 grep myservice

這是預期的嗎?為什麼pidof只返回我要停止的服務的正確 PID 並pgrep返回服務 PID 和初始化腳本的 PID?我可以依靠它pidof總是忽略初始化腳本中的 PID 嗎?

pidof = 查找正在執行的程序的程序 ID

Pidof 查找指定程序的程序 ID (pid)。它在標準輸出上列印這些 id。該程序在某些系統上用於執行級別更改腳本,尤其是當系統具有類似 rc 結構的 System-V 時。

sysadmin@codewarden:~$ pidof apache2
5098 5095 5094 5092

pgrep = 根據名稱和其他屬性查找或通知程序,pgrep 查看目前正在執行的程序並列出與選擇標準匹配的程序 ID。

sysadmin@codewarden:~$ pgrep apache2
5092
5094
5095
5098

pgrep, (p) = process, grep= grep 列印匹配的行

想了解更多關於 pgrep 和 pidof 的資訊嗎?只需在終端中執行

# man pidof
# man pgrep

引用自:https://unix.stackexchange.com/questions/117227