php - 查找/处理停滞的 PHP 脚本

标签 php ajax find scripting hung

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

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

谢谢, 布赖恩

最佳答案

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

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

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

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

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

关于php - 查找/处理停滞的 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1482119/

相关文章:

php - Codeigniter 测试 - 调用非对象的成员函数

javascript - 在 javascript 中访问响应 Json 数据

Unix 递归查找和替换?

python - Django 在 View 中测试 ajax 端点

javascript - 使用ajax检查网站的响应时间

regex - 递归查找正好 8 个十六进制字符的文件名,但不是全部 0-9,无前瞻(Mac 终端、bash)

C++ find_if 另一个类的成员变量

php - 如何像 mongodb 一样链接来自 mysql 的数据以将 json 传递给 api

php - 从数据库表输出csv文件

php - 将 mySQL 表合并成一行?