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


how to check whether process ended or not with php?

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

我有几个想法,例如:

pattern1:

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

或pattern2:

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

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

如果您知道进程的PID(这是一个好主意—让它将它的PID写入一个文件),那么您可以使用

检查它是否还活着。
posix_kill(PID,0)

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

然而,这有点假,因为如果出现了其他具有相同PID的进程,它可能返回TRUE。PID重用是很有可能的,特别是如果操作系统在进程启动后重新启动。

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

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