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