php cli 安全中斷退出

來源:互聯網
上載者:User
一個phpcli小程式,用

while(1){
....
}

方式處理隊列任務(主要是寫入mysql一些日誌), 求教如果控制台kill掉這個進程

怎麼安全中斷, 接受kill (或者 前台的 ctrl+z) 訊號
處理完一個任務, 輸出 byebye 再退出

謝謝

回複內容:

一個phpcli小程式,用

while(1){
....
}

方式處理隊列任務(主要是寫入mysql一些日誌), 求教如果控制台kill掉這個進程

怎麼安全中斷, 接受kill (或者 前台的 ctrl+z) 訊號
處理完一個任務, 輸出 byebye 再退出

謝謝

若需要指令碼終止時被調用,可以使用register_shutdown_function()或者__destruct(),但這個問題顯然需要進程式控制制,訊號處理器。

Ctrl-C送SIGINT訊號,預設進程會結束,但是進程自己可以重定義收到這個訊號的行為。

Ctrl-Z送SIGSTOP訊號,進程只是被停止,再送SIGCONT訊號,進程繼續運行,涉及到命令有jobs,fg,bg。

參考進程式控制制擴充預定義常量,http://php.net/manual/zh/function.pcntl-signal.php給出一段代碼,引用如下:

針對你的問題的面向過程式範例程式碼,當然也可以採用物件導向方式:

以上例子當執行ctrl+c或者kill時會輸出

➜ ....^Cctrl+cshutdown➜ .........killshutdown

ps -ef | grep php
會列出當前工作的指令碼,看看那個路徑對應的PID
然後Kill -9 {pid}

不知道還有沒有更好的辦法。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.