Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找/处理暂停的PHP脚本_Php_Ajax_Find_Scripting_Hung - Fatal编程技术网

查找/处理暂停的PHP脚本

查找/处理暂停的PHP脚本,php,ajax,find,scripting,hung,Php,Ajax,Find,Scripting,Hung,我使用Ajax启动了一个PHP脚本,该脚本可能需要几个小时才能运行。它是异步完成的,因此即使浏览器关闭,PHP脚本也将完成 我需要处理由于任何原因而暂停/挂起的任何PHP脚本。最好的办法是什么?有没有一种方法可以获取PHP脚本的进程id,用于定期检查活动?在开始新的脚本之前,我需要删除所有未完成的脚本 谢谢, Brian解决方案可能基于以下想法: 在长时间运行的脚本开始时,使用获取其PID(进程Id) 将该PID存储在一个文件中 在脚本末尾,即脚本结束之前,删除该文件 启动另一个进程时,它可

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

我需要处理由于任何原因而暂停/挂起的任何PHP脚本。最好的办法是什么?有没有一种方法可以获取PHP脚本的进程id,用于定期检查活动?在开始新的脚本之前,我需要删除所有未完成的脚本

谢谢,
Brian

解决方案可能基于以下想法:

  • 在长时间运行的脚本开始时,使用获取其PID(进程Id)
  • 将该PID存储在一个文件中
  • 在脚本末尾,即脚本结束之前,删除该文件
启动另一个进程时,它可以检查该文件是否存在:

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

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

这并不是问题的解决方案,但是从浏览器启动一个可以工作数小时的脚本会让人感觉不对劲:您无法从命令行发送它吗,也许用cron工作?我希望我能对Pascal MARTIN的评论投10票。谢谢,非常有用。是的,我可以通过exec运行它。还有一些细节:1)不是所有的进程都需要几个小时——有些只需要几分钟;2)限制是每个用户一个进程,而不是总数,一次可能有几十个或更多的用户。接下来,有没有一种有效的方法让PHP脚本监视资源,这样我就不会潜在地破坏我的服务器?如果你在Linux服务器上,也许可以这样做(取决于你做了什么);;如果一次有几十个用户和进程,请注意不要“吃掉”太多Apache进程,因为只有它们的MaxClient可以同时运行。