查找/处理停滞的PHP脚本

时间:2009-09-26 20:32:56

标签: php ajax find scripting hung

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

我需要处理任何因任何原因而停滞/挂起的PHP脚本。最好的方法是什么?有没有办法获取PHP脚本的进程ID,可以用来定期检查活动?我需要在开始新脚本之前杀死任何未完成的脚本。

谢谢, 布赖恩

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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