我想用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是更好的方式。但还有其他方法吗?
答案 0 :(得分:1)
方便的方法是在进程开始时在/ tmp中创建一个PID文件,例如:myprocess.pid。此文件包含已创建作业的进程ID。然后,您的监控工具可以轻松检查流程是否运行。
答案 1 :(得分:1)
如果您知道进程的PID(这是一个好主意 - 让它将其pid写入文件),那么您可以检查它是否还活着
posix_kill(PID,0)
仅当进程处于活动状态时才返回TRUE。
然而,这有点虚假,因为如果其他进程出现了相同的PID,它可能会返回TRUE。 PID重用非常可能,特别是如果自进程启动以来重新启动操作系统。
更好的方法是让进程锁定一个文件(例如flock)然后你可以看到锁是否仍然存在(通过尝试用FLOCK_NB自己锁定文件)