php停止shell exec取消

时间:2011-09-29 09:16:31

标签: php exec

当我通过按浏览器的“Stop”-Button取消PHP脚本时,exec(..)运行的外部二进制文件似乎没有停止。如果服务器配置为不为每个用户处理多个脚本,则会在运行的命令完成之前禁用任何用户活动。我怎么能告诉PHP在取消时杀死已执行的进程?

3 个答案:

答案 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");