5
我使用這個腳本在PHP 5.5.9:PHP CLI PCNTL不是在PHP7.0 Ubuntu的服務器xenial工作
declare(ticks = 1);
pcntl_signal(SIGTERM, array($this, 'stopSending'));
pcntl_signal(SIGINT, array($this, 'stopSending'));
pcntl_signal(SIGUSR1, array($this, 'stopSending'));
pcntl_signal(SIGUSR2, array($this, 'stopSending'));
pcntl_signal(SIGQUIT, array($this, 'stopSending'));
pcntl_signal(SIGHUP, array($this, 'stopSending'));
public function stopSending($signals)
{
echo "hello";
exit();
}
while (true) {
// some logic
}
在Ubuntu的14工作正常,但是當嘗試在Ubuntu 16.04與執行PHP7.0並嘗試發送信號(終止PID),PHP CLI不停止並保持運行。
在Ubuntu的16.04我檢查了pcntl擴展,這是確定的:
>php -m | grep pcntl
pcntl
,當我跑我沒有得到任何錯誤,但是沒有停止(或顯示回波)。
PHP7和pcntl有問題嗎?
UPDATE
問題是,當封裝while循環進入功能:
function start()
{
while (true) {
// some logic
}
}
declare(ticks = 1);
pcntl_signal(SIGTERM, "stopSending");
pcntl_signal(SIGINT, "stopSending");
pcntl_signal(SIGUSR1, "stopSending");
pcntl_signal(SIGUSR2, "stopSending");
pcntl_signal(SIGQUIT, "stopSending");
pcntl_signal(SIGHUP, "stopSending");
function stopSending($signals)
{
echo "hello";
exit();
}
start();
此代碼不會停止。
您發佈的代碼不會在SIGTERM上退出。所以發送SIGTERM時不應該停止。爲什麼以前沒有工作,這是正確的問題。 –
@ErkiA我編輯了代碼。在寄存器信號處理程序之後我有一個for循環。問題是信號被stopSending()捕獲,但沒有打印回顯。 – jfra
@ErkiA我的意思是,這是調試代碼。函數「stopSending」的原始代碼退出程序。 – jfra