Process
為什麼守護程序將它們的 PID(程序 ID)儲存在文件中?
在我的系統
/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 文件還用於確定要終止哪個程序以停止守護程序。