【发布时间】:2013-07-26 06:17:57
【问题描述】:
我想在后台运行一个 php 脚本并将其 PID 存储在数据库中。这样我就可以检查特定脚本是否正在运行(稍后)。
我们可以使用getmypid来获取当前的PID。
但根据 PHP 手册
进程 ID 不是唯一的,因此它们是弱熵源。我们 建议不要在依赖安全的上下文中依赖 pid。
...我不能依赖 PID。
我的第二个想法是将进程创建时间存储到数据库中。
如何获取当前脚本的创建时间?以后如何与任务列表进行比较以检查特定脚本是否正在运行?
我在一个共享主机上运行,windows/linux 环境。
【问题讨论】:
-
在安全相关上下文中关于 PID 的评论是指“熵源”和
srand(getmypid());等情况。您似乎需要某种进程监控机制,如 daemontools、perp、minit 等:这些机制中的大多数会分叉出一个子进程并监视文件描述符和信号以查看子进程是否还活着。根据您的想法,您必须解决时间问题、权限等问题(以确定当前具有您存储在数据库中的 PID 的进程是否实际上是同一个进程)。 -
kr.github.io/beanstalkd(这是一个作业队列)顺便说一句,它使用了一些简洁的东西:接受给定作业的进程必须向队列报告它仍然处于活动状态并且正在处理该任务。你也可以在php中实现类似的东西:如果进程本身没有及时报告给定的标识符,你可以认为该任务被中断/失败等。观察产生/分叉子进程的信号/文件描述符仍然更容易恕我直言。
-
可能有用:github.com/CHH/kue -
A minimalistic, generic and framework independent interface to job queues -
@akira 非常感谢 .. 让我检查一下 ..
标签: php