2

我使用 Ajax 启动可能需要几个小时才能运行的 PHP 脚本。它是异步完成的,因此即使浏览器关闭,PHP 脚本也会完成。

我需要处理任何由于某种原因而停止/挂起的 PHP 脚本。解决此问题的最佳方法是什么?有没有办法获取可用于定期检查活动的 PHP 脚本的进程 ID?在开始新的脚本之前,我需要杀死所有未完成的脚本。

谢谢,布赖恩

4

1 回答 1

5

一个解决方案可能基于这个想法:

  • 在长时间运行的脚本开始时,getmypid用于获取其 PID(进程 ID)
  • 将该 PID 存储在文件中
  • 在脚本结束时,就在它结束之前,删除该文件。

当另一个进程启动时,它可以检查该文件是否存在:

  • 如果是并且文件中包含 PID 的进程仍在运行,那么您必须:
    • 要么杀了它
    • 或者停止,考虑到一个进程同时运行就足够了
  • 如果文件存在,但具有该 PID 的进程不存在,则意味着您的第一个进程已死亡(例如致命错误)
  • 如果文件不存在,则表示第一个进程正常完成

关于检测进程是否正在运行并最终杀死它,我不确定 PHP 是否提供这种功能......可能需要使用exec来调用命令行实用程序,如pskill......

于 2009-09-26T20:39:52.950 回答