php停止已经运行的脚本进程
Posted
技术标签:
【中文标题】php停止已经运行的脚本进程【英文标题】:php stop script process that is already running 【发布时间】:2013-01-09 18:01:17 【问题描述】:我有一个 php 程序,它执行大量 curl 请求来抓取网页。它可能多达一百万个请求。我需要完全停止脚本运行。即使我在浏览器中停止了它,它仍在处理请求。我怎样才能永久停止它?
【问题讨论】:
在这种情况下应该总是有一个终止开关>。 我现在明白了我所做的是不好的做法:|感谢您的所有回答! 【参考方案1】:您只是在终止请求,您需要停止 apache 以暂时停止它。将来重新设计它,以便进程查找终止开关(如文件的存在)并在找到它时停止处理。听起来你把一个长时间运行的进程塞进了一个 php 脚本,为什么不直接把它作为一个正常的系统进程运行呢?
【讨论】:
所以这可以像检查maintenance.flag
一样简单?
当然,几乎任何东西。例如 /tmp 中的文件。
太好了,我想一切都是一个学习的过程。我会在未来为每一个更大的项目做计划。【参考方案2】:
假设您正在运行典型的灯堆栈,如有必要,通过 SSH 连接到您的计算机,然后重新启动 Apache。
如果您真的要使用 PHP 执行长时间运行的任务,我必须建议您考虑使用 cron 来运行它们或实现某种任务队列。从浏览器请求中触发这类事情通常是一个非常糟糕的主意。
【讨论】:
【参考方案3】:重新启动 Apache。如果您使用的是 XAMP,请从控制面板停止并启动它。
如果没有,在 Windows 上,转到任务管理器并结束 apache.exe
进程。然后重新开始。
【讨论】:
【参考方案4】:为什么每个人都认为你在运行 Apache?重新启动您的网络服务器,它应该是花花公子。将来,您可能会有一个终止开关,例如(示例):
while(!file_exists('stop.txt'))
然后在你准备好停止的时候创建那个文件 ^.^ 或者在切断之前进行有限次数的迭代。
【讨论】:
我个人认为 Apache 的假设并不合理。 LAMP 堆栈非常常见,许多其他服务器处理这样的挂起脚本时都有自己的超时。我认为我们在职业生涯早期都曾因一些愚蠢的 PHP 错误而与挂起的 Apache 线程作斗争,所以这是一个快速识别:)以上是关于php停止已经运行的脚本进程的主要内容,如果未能解决你的问题,请参考以下文章