【发布时间】:2014-01-30 13:39:56
【问题描述】:
我正在使用 php 进程在后台发送电子邮件,并且我正在尝试找到一种自动恢复的方法,以防服务器出现故障或脚本发生故障以使其停止。
我的逻辑是:如果发送会话仍在运行但在 X 时间内没有发送新电子邮件,如果已经在运行,则终止该进程并启动一个新进程。
现在,我的问题在于“如果已经运行则终止进程”部分。我如何确定这个 PID 的进程与我为发送会话启动的进程相同?我无法检查名称,因为我将同时运行其中的几个。我不想杀死一个随机进程或另一个发送进程。
那么问题来了:我怎样才能唯一标识一个在linux上运行的进程呢?或者我怎样才能以某种方式标记它以使其独一无二?有没有办法从外面检查它的参数?
【问题讨论】:
-
您可以像大多数其他软件一样创建一个 PID 文件,然后使用这个文件。 db 存储值也是可用的。如果是控制台运行 PHP 脚本,您可以使用 getmypid() 存储您的 PID,并在必要时使用此 PID 杀死。
-
我已经有进程的PID存储在数据库中。我需要一些方法来确保这无疑是发送会话的正确过程。
-
如果您的脚本作为控制台 PHP 脚本运行,您可以确定。
-
即使在服务器关闭之后?脚本可以运行数天,甚至数周;我想消除服务器关闭导致 PID 重新分配给其他进程的可能性。
-
好吧,我没想到服务器会关闭...你猜不是。我怀疑是否有办法获得持久的唯一进程 ID。哦,但是顺便说一句,PHP 有一个最大执行时间。也许将其用作防止僵尸进程的更好方法?