php停止shell exec取消

问题描述 投票:0回答:2

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

php exec
2个回答
1
投票

简而言之,具有困难的因素。

您的浏览器向服务器说“执行此页面”,然后服务器回复运行脚本时返回的内容。如果客户端消失,服务器通常仍然会完成脚本,不管浏览器是否监听。

我能想到的唯一方法是,如果服务器是UNIX,你可以做一些事情来尝试运行你正在运行的命令的PID,如果你读了http://php.net/manual/en/features.connection-handling.php,你可以设置在断开连接时发生的事情。接下来你可以让PID运行另一个命令以终止命令。

但是,我想保证结果。


0
投票

在网页中使用exec进行午餐过程并保持返回的pid。

$pid = exec($command);

稍后在您的UI中检查进程是否结束,如果需要,允许用户使用以下内容来终止进程:

exec("kill -9 $pid");

由于它是由Apache启动的,因此Apache应该可以杀死它。我看到ajax调用某种REST API,你应该注意不要让用户杀死他们开始的进程。

© www.soinside.com 2019 - 2024. All rights reserved.