
我正在編寫一個 PHP 腳本來啟動和監視進程。我曾經ps <pid>
這樣做過,但在極少數情況下,它並不可靠,因為在我的進程實際結束後,同一 pid 正在運行一個不相關的進程。
所以我想在我的命令中添加一個隨機字串,以便我的 PHP 腳本可以確保它是它啟動的進程。我有什麼選擇來做到這一點?
到目前為止我想出了這個:
"USELESS_VAR_0nQjdXR45P=\"{$cmdRandomString}\" | $cmd"
其中 $cmd 是我想要運行的實際命令。 $cmdRandomString 是我新增的隨機字串ps aux
。
是因為快完結了嗎?
我還嘗試添加一個虛擬命令選項,--xxxx=yyyy
但該命令會傳回一個致命錯誤,因為不知道該選項。
有什麼辦法可以做到這一點嗎?或者除了不可靠的pid之外還有其他可靠的方法來識別進程嗎?
答案1
除了不可靠的pid之外,還有其他可靠的方法來識別進程嗎?
可靠地做到這一點的方法是自己啟動進程,並在它終止時捕獲它,例如,您收到 unix 訊號 SIGCHILD。 pid 將繼續存在(處於稱為「殭屍」的狀態),直到您使用子死亡通知,例如waitpid()
。
在某些情況下,您需要將其委託給進程管理程式守護進程,例如systemd
。例如,您可以使用 來查詢它systemctl status my-process.service
。如果您有一個 PHP 網頁,需要啟動一個長時間運行的進程(如守護程式),這將很有用。