我一直在使用此功能来检查进程是否正在运行。 (我是从http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/获得的):
function Is_Process_Running($PID){
exec("ps $PID", $ProcessState);
return(count($ProcessState) >= 2);
}
我对它的理解是,只有当数组$ ProcessState中有两行以上时才会返回该函数,如果进程处于活动状态,它将会返回。
因此,当流程如下所示(也来自上面的链接)时,编写一些代码来执行操作很容易:
while(is_process_running($PID))
{
echo(" . ");
ob_flush(); flush();
sleep(1);
}
但是,当流程完成时,执行操作的最佳方法是什么?我试过了:
while(! is_process_running($PID))
但这不起作用,我认为因为它只通过循环一次。非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
在循环之后输入要执行的代码:
// Process is still running
while (is_process_running($PID))
{
// wait
}
// Process is no longer running
do_stuff_afterwards();
如果您需要根据流程是否一直在运行而进行分支,则可以将整个事物包装在if (is_process_running($PID))
条件中。
答案 1 :(得分:1)
查看PCNTL功能(http://php.net/manual/en/ref.pcntl.php)。根据您的尝试,该库可能非常有用。各个功能页面上有一些代码示例...请查看pcntl_wait();