Process

為什麼守護程序將它們的 PID(程序 ID)儲存在文件中?

  • May 17, 2017

在我的系統/run目錄中,我有一堆具有*.pid副檔名的文件並儲存正在執行的守護程序的程序 ID,即

% ls -1 /run/*.pid                    
acpid.pid
crond.pid
dhclient-wlp2s0.pid
irqbalance.pid
lightdm.pid
nginx.pid
rsyslogd.pid

而且我通常注意到這是許多其他守護程序所做的事情,並且守護程序管理腳本/etc/init.d/*將從最後一個執行實例中讀取 pid,並在啟動新實例時重用它。

為什麼?為什麼不直接啟動守護程序並給它一個新的 pid?

是否有其他程序(例如 rsyslog)期望該守護程序具有該標識符,並且如果其他程序正在使用該 pid 會感到困惑?

對於許多守護程序,任何時候都應該只有一個守護程序實例在系統上執行。在這個案例中,守護程序通常將其 PID 儲存在一個眾所周知的目錄中(在 Linux 上,目前/run,以前/var/run),以指示守護程序的實例正在執行。

如果您嘗試呼叫此類守護程序的第二個實例,則新呼叫的守護程序會檢查現有條目(將其視為鎖定文件)/run,如果找到則退出。

如果守護程序重新啟動,則新實例的 PID 將寫入文件。新實例有自己的 PID,無法啟動具有給定 PID 的程序。

PID 文件還用於確定要終止哪個程序以停止守護程序。

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