在PHP中完成进程后执行操作

时间:2011-11-07 13:30:51

标签: php process

我一直在使用此功能来检查进程是否正在运行。 (我是从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))

但这不起作用,我认为因为它只通过循环一次。非常感谢任何帮助,谢谢!

2 个答案:

答案 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();