查找/处理暂停的PHP脚本
我使用Ajax启动了一个PHP脚本,该脚本可能需要几个小时才能运行。它是异步完成的,因此即使浏览器关闭,PHP脚本也将完成 我需要处理由于任何原因而暂停/挂起的任何PHP脚本。最好的办法是什么?有没有一种方法可以获取PHP脚本的进程id,用于定期检查活动?在开始新的脚本之前,我需要删除所有未完成的脚本 谢谢,查找/处理暂停的PHP脚本,php,ajax,find,scripting,hung,Php,Ajax,Find,Scripting,Hung,我使用Ajax启动了一个PHP脚本,该脚本可能需要几个小时才能运行。它是异步完成的,因此即使浏览器关闭,PHP脚本也将完成 我需要处理由于任何原因而暂停/挂起的任何PHP脚本。最好的办法是什么?有没有一种方法可以获取PHP脚本的进程id,用于定期检查活动?在开始新的脚本之前,我需要删除所有未完成的脚本 谢谢, Brian解决方案可能基于以下想法: 在长时间运行的脚本开始时,使用获取其PID(进程Id) 将该PID存储在一个文件中 在脚本末尾,即脚本结束之前,删除该文件 启动另一个进程时,它可
Brian解决方案可能基于以下想法:
- 在长时间运行的脚本开始时,使用获取其PID(进程Id)
- 将该PID存储在一个文件中
- 在脚本末尾,即脚本结束之前,删除该文件
- 如果是,并且文件中包含PID的进程仍在运行,则di必须:
- 要么杀了它
- 或者停止,考虑一个进程同时运行就足够了
- 如果文件存在,但具有该PID的进程不存在,则表示第一个进程已死亡(例如,致命错误)
- 如果文件不存在,则表示第一个进程正常完成
关于检测进程是否正在运行,并最终杀死它,我不确定PHP是否提供了这种功能性。。。可能需要使用调用命令行实用程序,如
ps
和kill
…这并不是问题的解决方案,但是从浏览器启动一个可以工作数小时的脚本会让人感觉不对劲:您无法从命令行发送它吗,也许用cron工作?我希望我能对Pascal MARTIN的评论投10票。谢谢,非常有用。是的,我可以通过exec运行它。还有一些细节:1)不是所有的进程都需要几个小时——有些只需要几分钟;2)限制是每个用户一个进程,而不是总数,一次可能有几十个或更多的用户。接下来,有没有一种有效的方法让PHP脚本监视资源,这样我就不会潜在地破坏我的服务器?如果你在Linux服务器上,也许可以这样做(取决于你做了什么);;如果一次有几十个用户和进程,请注意不要“吃掉”太多Apache进程,因为只有它们的MaxClient可以同时运行。