不活动后PHP杀死进程

时间:2017-03-01 22:14:16

标签: php

我有一个脚本可能会在一段时间后变为非活动状态,因为它会从一个非常慢的服务器请求信息并且会话过期时间很短。
脚本none;在每个进程完成之后进入shell,作为调试代码的方式。有没有办法从另一个脚本执行脚本并在最后echo一段时间后终止它。换句话说,在不活动后杀死脚本 编辑:这里我们可以举例说明我的代码:

echo

如您所见,我在每个流程后foreach ($info["Ten_Friends"] as $friend) { $info = []; echo "11111 \n"; $info = $i->userAnalysis($friend); if ($info != false) { echo "if to database\n"; if (($i->usersDatabase($info) == true)) { mediaDataBase($info); $nAnalized += 1; echo "nAnalized: ".$nAnalized."\n"; } } else {echo $friend." not analised";} echo "3333\n"; } echo$i->userAnalysis($friend);都向服务器请求数据,此功能可能在一段时间后无响应,因此如果他们这样做,我需要终止脚本。
在Osx El Capitan和mysql上运行Php 5.6

1 个答案:

答案 0 :(得分:0)

试试这个:

$cmd = "php AnalyzeFriends.php";
$timeout_tolerance = 10; // 10 seconds
$last_response = time(); // start time

ob_implicit_flush(true);
ob_end_flush();

$descriptorspec = array(
   0 => array("pipe", "r"),   // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),   // stdout is a pipe that the child will write to
   2 => array("pipe", "w")    // stderr is a pipe that the child will write to
);
flush();
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre>";
if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        if((time() - $last_response) > $timeout_tolerance){
          fclose($pipes[0]);
          fclose($pipes[1]);
          fclose($pipes[2]);
          proc_close($process);
        }
        $last_response = time();
        flush();
    }
}
echo "</pre>";

将此作为单独的脚本运行,可以调用您发布的脚本,查找回声,如果它没有收到回声