Grep
為什麼 pidof 和 pgrep 的行為不同?
我有一個初始化腳本
/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