鉴于以下 php 代码...
<?php
exec('myscript.php');
exec('finish.php');
?>
有没有办法判断 myscript.php 何时停止运行?
我想阻止finish.php
运行直到myscript.php
完成。
exec() 调用将阻塞,直到外部作业完成。除非您强制 myscript 调用之一在后台运行,否则您将永远无法在 myscript.php 运行时运行 finish.php。
$output = shell_exec("myscript.php");
这只是一个猜测,但我敢打赌你会看到执行错误。这可能是因为 myscript.php 没有运行所需的 bang 行 (#!/usr/bin/php) 和 +x 标志。
* 更新 *
或者,您似乎可以
include("myscript.php");
include("finish.php");
这将得到您正在寻找的结果。如果您真的想在运行过程之外执行这些,请参阅我上面关于 bang line 和使脚本可执行的评论。
有没有办法判断 myscript.php 何时停止运行?
如果它运行finish.php
,则执行myscript.php
完成。如果它是一个后台进程,你可以例如做一些“hacky”的事情,比如在myscript.php
完成时创建一个文件并检查它。
从文档:
如果使用此函数启动程序,为了使其继续在后台运行,程序的输出必须重定向到文件或另一个输出流。否则将导致 PHP 挂起,直到程序执行结束。
我建议您使用 proc_open,因为它提供了更多的灵活性。您还应该注意,在 exec() 的情况下,第二个只会在第一个终止后调用。