如何用php检查进程是否结束?

时间:2011-09-30 16:10:34

标签: php linux

我想用php检查进程是否结束。请告诉我解决这个问题的更好方法是什么。

我已经考虑了几个想法,例如:

模式1:

$res=array();
exec('ps auxww | grep "some.php some_param 1" | grep -v grep', $res);
//if $res is empty, process may have ended.

或 模式2:

$res = array();
exec('pgrep -fx "some.php some_params 1"', $res);

目前我认为pgrep是更好的方式。但还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

方便的方法是在进程开始时在/ tmp中创建一个PID文件,例如:myprocess.pid。此文件包含已创建作业的进程ID。然后,您的监控工具可以轻松检查流程是否运行。

答案 1 :(得分:1)

如果您知道进程的PID(这是一个好主意 - 让它将其pid写入文件),那么您可以检查它是否还活着

posix_kill(PID,0)

仅当进程处于活动状态时才返回TRUE。

然而,这有点虚假,因为如果其他进程出现了相同的PID,它可能会返回TRUE。 PID重用非常可能,特别是如果自进程启动以来重新启动操作系统。

更好的方法是让进程锁定一个文件(例如flock)然后你可以看到锁是否仍然存在(通过尝试用FLOCK_NB自己锁定文件)