2015-10-13 46 views
2

我寫了一個長時間運行的PHP後臺程序。有幾次,我希望它停止,但停​​止優雅,如何最好的告訴一個後臺PHP程序停止

我所做的是,在主邏輯循環中我測試了具有特定名稱的文件的存在。如果文件存在,則程序停止。當我想讓程序自行結束時,我只是創建該文件。

有沒有更好的方法來做到這一點。

我不想殺死這個過程。我希望程序自行結束。

+0

,你可以在你的PHP文件執行信號處理程序(HTTP:// PHP。 net/manual/en/function.pcntl-signal.php),然後使用kill SIGHUP,kill SIGKILL等與控制檯進程進行交互。 –

+0

是的,這就是我所做的。我測試了一個文件stopProgramX的存在 – sdfor

回答

1

正如評論中所建議的那樣,您可以使用信號來終止您的過程。你將要使用的信號是SIGTERM信號(重點煤礦)[ref]:

SIGTERM信號被髮送到一個進程要求其終止。與SIGKILL信號不同,它可以被過程捕獲,解釋或忽略。這允許進程執行良好的終止釋放資源並且在適當的情況下保存狀態。 SIGINT與SIGTERM幾乎完全相同。

爲此,請在啓動主循環前使用pcntl_signal函數註冊信號處理程序。

declare(ticks = 1); 
$stopProcess = FALSE; 
pcntl_signal(SIGTERM, function() use (&$stopProcess) { 
    echo "Received SIGTERM...\n"; 
    // Do further cleanup work either here or after the end of your main loop 
    $stopProcess = TRUE; 
}); 

while (!$stopProcess) { 
    // main work loop 
} 

// Do cleanup work either here or in your signal handler 

在命令行中,你可以使用kill可執行到SIGTERM信號發送到您的過程:

$ kill -TERM <process id> 
相關問題