2012-03-01 16 views
7

我如何處理CTRL +Ç PHP命令行?在Windows中,Pcntl_*函數不起作用。Windows中的PHP CLI:處理Ctrl-C命令?

+0

你想達到什麼目的? – 2012-03-01 20:22:40

+0

沒有Windows測試,也許['w32api_register_function'(http://www.php.net/manual/en/function.w32api-register-function.php)與['SetConsoleCtrlHandler'(HTTP:// MSDN。 microsoft.com/en-us/library/windows/desktop/ms686016(v=vs.85).aspx),但這是瘋狂猜測在這裏...很可能是錯誤的。 – Wrikken 2012-03-01 20:23:55

+0

@Dagon當我打斷它時,我需要腳本來做些事情。例如,在退出之前將內存中的xml dom寫入文件。 – x74x61 2012-03-01 20:39:38

回答

0

如果你想運行通過命令行PHP中的任務,它需要很長的時間,我會盡量將其安排在徽章和跟蹤哪些已經完成。

現在,你可以完全處理每個徽章(比如:過程,然後將其保存在一個XML文件),並處理整個名單後不但。所以在兩者之間的碰撞/停止只會取消一個徽章而不是所有的徽章。

如果您存儲每個徽章後,您的當前位置的地方,你可以很容易地在你的腳本崩潰或停止恢復。

現在,如果您檢查系統進程列表,看看你的腳本運行時,你可以寫,如果每隔X分鐘就已經墜毀並且尚未運行啓動腳本cron作業。

因此,TL; DR

  • 處理作業中的小徽章去年成功處理徽章
  • 檢查在啓動
  • 已經運行的進程
  • 不斷啓動腳本,直到所有人都高興的
  • 商店位置!

這且不說,我喜歡PHP的小的命令行工作,但如果你有這麼大的任務,別的東西可能更適合。檢查一些可以長時間穩定運行的東西,並有辦法顯示它的進展。也許是一個帶簡約GUI的小型C#應用程序。

+0

這可能不是您尋找的CtRL + C解決方案,但它是一個可行的解決方案。我非常懷疑PHP可以處理流程中止!你可能會嘗試你的運氣與「register_shutdown_function」 – ToBe 2013-07-11 13:59:58

+0

那麼,有pcntl_signal,但這隻適用於Unix系統。 – 2015-04-09 18:24:40