2

鉴于以下 php 代码...

 <?php   
     exec('myscript.php');
     exec('finish.php'); 
?>

有没有办法判断 myscript.php 何时停止运行?

我想阻止finish.php运行直到myscript.php完成。

4

4 回答 4

2

exec() 调用将阻塞,直到外部作业完成。除非您强制 myscript 调用之一在后台运行,否则您将永远无法在 myscript.php 运行时运行 finish.php。

于 2012-04-04T21:52:36.210 回答
0
$output = shell_exec("myscript.php"); 

这只是一个猜测,但我敢打赌你会看到执行错误。这可能是因为 myscript.php 没有运行所需的 bang 行 (#!/usr/bin/php) 和 +x 标志。

* 更新 *

或者,您似乎可以

include("myscript.php");
include("finish.php");

这将得到您正在寻找的结果。如果您真的想在运行过程之外执行这些,请参阅我上面关于 bang line 和使脚本可执行的评论。

于 2012-04-04T21:52:55.393 回答
0

有没有办法判断 myscript.php 何时停止运行?

如果它运行finish.php,则执行myscript.php完成。如果它是一个后台进程,你可以例如做一些“hacky”的事情,比如在myscript.php完成时创建一个文件并检查它。

文档

如果使用此函数启动程序,为了使其继续在后台运行,程序的输出必须重定向到文件或另一个输出流。否则将导致 PHP 挂起,直到程序执行结束。

于 2012-04-04T21:54:23.547 回答
0

我建议您使用 proc_open,因为它提供了更多的灵活性。您还应该注意,在 exec() 的情况下,第二个只会在第一个终止后调用。

于 2012-04-04T21:57:25.707 回答