我使用 Ajax 启动一个可能需要几个小时才能运行的 PHP 脚本。它是异步完成的,因此即使浏览器关闭,PHP 脚本也会完成。
我需要处理任何由于某种原因而停止/挂起的 PHP 脚本。解决这个问题的最佳方法是什么?有没有办法获取可用于定期检查事件的 PHP 脚本的进程 ID?我需要在开始新脚本之前杀死所有未完成的脚本。
谢谢, 布赖恩
最佳答案
解决方案可能基于这个想法:
- 在长时间运行的脚本的开头,使用
getmypid
获取其 PID(进程 ID) - 将该 PID 存储在文件中
- 在脚本末尾,就在结束之前,删除该文件。
当另一个进程启动时,它可以检查该文件是否存在:
- 如果是,并且文件中包含 PID 的进程仍在运行,则您必须执行以下操作:
- 要么杀了它
- 或者停止,考虑一个进程同时运行就足够了
- 如果该文件存在,但具有该 PID 的进程不存在,则意味着您的第一个进程已死亡(例如 fatal error )
- 如果该文件不存在,则表示第一个进程正常完成
关于检测进程是否正在运行,并最终杀死它,我不确定 PHP 是否提供了这种功能......可能需要使用 exec
调用命令行实用程序,例如 ps
和 kill
...
关于php - 查找/处理停滞的 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1482119/