当我通过按下浏览器的“Stop”-Button取消PHP脚本时,似乎exec(..)
运行的外部二进制文件没有停止。如果服务器配置为不为每个用户处理多个脚本,则会在运行的命令完成之前禁用任何用户活动。我怎么能告诉PHP在取消时杀死已执行的进程?
简而言之,具有困难的因素。
您的浏览器向服务器说“执行此页面”,然后服务器回复运行脚本时返回的内容。如果客户端消失,服务器通常仍然会完成脚本,不管浏览器是否监听。
我能想到的唯一方法是,如果服务器是UNIX,你可以做一些事情来尝试运行你正在运行的命令的PID,如果你读了http://php.net/manual/en/features.connection-handling.php,你可以设置在断开连接时发生的事情。接下来你可以让PID运行另一个命令以终止命令。
但是,我想保证结果。
在网页中使用exec进行午餐过程并保持返回的pid。
$pid = exec($command);
稍后在您的UI中检查进程是否结束,如果需要,允许用户使用以下内容来终止进程:
exec("kill -9 $pid");
由于它是由Apache启动的,因此Apache应该可以杀死它。我看到ajax调用某种REST API,你应该注意不要让用户杀死他们开始的进程。