1

我有一个使用 shell_exec 的工作 php 脚本来执行一个大约需要 30 秒才能完成的外部程序。问题是,如果用户关闭浏览器或连接由于某种原因关闭,使用 shell_exec 执行的程序将继续运行,因为它的输出无法再发送给用户。

有没有办法在连接关闭后立即终止这个进程?

谢谢您的帮助。

4

3 回答 3

2

终于我解决了!

我已经使用 PHP 函数connection_aborted()来检查客户端是否断开连接。 http://us2.php.net/manual/en/function.connection-aborted.php

算法如下(伪代码)

shell_exec("script");//script is a shell script that launch the program in another thread thus this return immediately
$task_completed=false;
while(!$task_completed){
    if(connection_aborted()==1){
        kill_the_process();//this will kill the running process launched by script
        die();
    }
    $task_completed=...;//true if the task completed
    sleep(1);
}
于 2013-06-24T09:05:09.137 回答
0

您可以使用获取所有正在运行的进程的列表

$res = shell_exec('ps -x');
$res = explode("\n",$res);
print_r($res);

并使用它来杀死具有给定ProcessID的进程

shell_exec('kill -KILL ProcessID');
于 2013-04-19T11:32:11.950 回答
0

您可以创建一个运行/执行/停止正在运行的 php 脚本的管理器。该脚本将不断运行(可能作为守护进程)并检查脚本/进程的状态、用户状态,如果用户离开则关闭脚本。我认为你可以用 Sockets 很好地做到这一点。
如何在 JavaScript\HTML 中使用套接字?
http://php.net/manual/en/book.sockets.php

于 2013-04-19T11:16:49.030 回答