Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中完成进程后执行操作_Php_Process - Fatal编程技术网

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

在PHP中完成进程后执行操作,php,process,Php,Process,我一直在使用这个函数来检查进程是否正在运行。(我从以下网站获得): 我的理解是,只有当数组$ProcessState中有两行以上的行时,函数才会返回,如果进程处于活动状态,函数就会返回 因此,在流程按以下方式运行时(也可从上面的链接),编写代码以执行操作是很容易的: 但是,当流程完成时,执行操作的最佳方式是什么?我试过: while(! is_process_running($PID)) 但这不起作用,我想,因为它只经过一次循环。非常感谢您的帮助,谢谢 只需将要执行的代码放在循环之后: //

我一直在使用这个函数来检查进程是否正在运行。(我从以下网站获得):

我的理解是,只有当数组$ProcessState中有两行以上的行时,函数才会返回,如果进程处于活动状态,函数就会返回

因此,在流程按以下方式运行时(也可从上面的链接),编写代码以执行操作是很容易的:

但是,当流程完成时,执行操作的最佳方式是什么?我试过:

while(! is_process_running($PID))

但这不起作用,我想,因为它只经过一次循环。非常感谢您的帮助,谢谢

只需将要执行的代码放在循环之后:

// Process is still running
while (is_process_running($PID))
{
  // wait
}

// Process is no longer running
do_stuff_afterwards();

如果您首先需要根据进程是否正在运行来进行分支,那么您可以将整个过程包装在一个
If(is\u process\u running($PID))
条件中。

查看PCNTL函数(http://php.net/manual/en/ref.pcntl.php). 根据您的尝试,此库可能非常有用。在各个函数页上有一些代码示例。。。查看pcntl_wait()

天哪,我真的没想到会那么容易,谢谢!但我没有意识到,这会使php页面在等待while循环时暂停,这对我来说并不理想。必须考虑另一种解决方案,可能将PID提供给bash脚本或其他东西。干杯@Jingo:PHP是唯一的单线程。如果您需要等待一个事件,您可能需要研究一些基于事件的回调系统。我对PHP的任何方面都不太熟悉,但我绝不是一个专家,而且有可能存在这样的解决方案。您总是可以问一个关于“异步等待进程在PHP中终止”之类的单独问题。。。
while(! is_process_running($PID))
// Process is still running
while (is_process_running($PID))
{
  // wait
}

// Process is no longer running
do_stuff_afterwards();