我使用Ajax啓動可能需要幾個小時才能運行的PHP腳本。它是異步完成的,因此即使瀏覽器關閉,PHP腳本也會完成。查找/處理停滯的PHP腳本
我需要處理任何因任何原因而停滯/掛起的PHP腳本。什麼是最好的方式去做這件事?有沒有辦法讓PHP腳本的進程ID可以用來定期檢查活動?在開始新腳本之前,我需要殺死任何出色的腳本。
感謝, 布賴恩
我使用Ajax啓動可能需要幾個小時才能運行的PHP腳本。它是異步完成的,因此即使瀏覽器關閉,PHP腳本也會完成。查找/處理停滯的PHP腳本
我需要處理任何因任何原因而停滯/掛起的PHP腳本。什麼是最好的方式去做這件事?有沒有辦法讓PHP腳本的進程ID可以用來定期檢查活動?在開始新腳本之前,我需要殺死任何出色的腳本。
感謝, 布賴恩
一個解決方案可能是基於這樣的想法:
getmypid
以獲得其PID(進程ID)當另一個進程啓動時,它可以檢查該文件是否存在:
關於檢測進程是否正在運行並最終將其殺死,我不確定PHP是否提供了這種功能......可能需要使用exec
來調用命令行實用程序,如ps
和kill
..
謝謝,非常有幫助。是的,我可以通過exec來運行它。更多細節:1)不是所有的都需要幾個小時 - 有的只需要幾分鐘,2)限制是每個用戶一個進程,而不是全部,每次可能有幾十個用戶。 作爲一個後續,是否有一個PHP腳本來監視資源的有效方法,所以我不會有可能炸燬我的服務器? – Brian 2009-09-26 21:10:55
如果你在Linux服務器上,也許http://php.net/sys_getloadavg可以做(取決於你做什麼);;如果一次有數十個用戶和進程,請注意不要「吃」太多的Apache進程,因爲只有MaxClients可以同時運行。 – 2009-09-26 21:15:36
非常感謝。 – Brian 2009-09-26 21:24:19
解決您的問題並不是一個解決方案,但啓動一個能夠在瀏覽器上運行數小時的腳本會感覺不對:是不是沒有辦法ld從命令行發送它,也許使用cron作業? – 2009-09-26 20:36:04
我希望我能在Pascal MARTIN的評論上投票10次左右。 – gahooa 2009-09-26 20:54:06