PHP-php获取shell命令执行时间

小组事务管理 小组事务管理 主题:974 回复:1955

PHP-php获取shell命令执行时间

晚风撩人 发布于 2016-11-19 字数 181 浏览 1223 回复 2

php怎么精确得到一个shell命令执行时间?如果超过一定时间限制,这条命令就终止执行。
就像php用下面的cgi方式执行。
php -f test.php 'mkdir -p {1..10000}dir/{1..1000}file'

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

偏爱自由 2017-02-23 2 楼

<?php
class runtime
{
var $StartTime = 0;
var $StopTime = 0;

    function get_microtime()
    {
        list($usec, $sec) = explode(' ', microtime());
        return ((float)$usec + (float)$sec);
    }

    function start()
    {
        $this-&gt;StartTime = $this-&gt;get_microtime();
    }

    function stop()
    {
        $this-&gt;StopTime = $this-&gt;get_microtime();
    }

    function spent()
    {
        return round(($this-&gt;StopTime - $this-&gt;StartTime) * 1000, 1);
    }

}


//例子
$runtime= new runtime;
$runtime-&gt;start();

//你的代码开始

$a = 0;
for($i=0; $i&lt;1000000; $i++)
{
    $a += $i;
}

//你的代码结束

$runtime-&gt;stop();
echo "页面执行时间: ".$runtime-&gt;spent()." 毫秒";

?>

瑾兮 2017-01-10 1 楼

获取精确时间好办, microtime 就可以取到.
关键应该是达到一定时间后, 自动结束程序.

程序内部可以考虑这种

set_time_limit(2);

register_shutdown_function('get_error');
function get_error()
{
print_r(error_get_last());
}

echo 'do something';

sleep(5);

通过设置脚本超时时间, 可以间接做到程序运行一段时间后自动结束.
通过register_shutdown_function可以捕获到这个Fatal Error, 从而记录日志等后一步操作.

外部模式
通过创建一个PHP守护进程, 由此进程SHELL出其他的单任务PHP进程, 然后守护进程对SHELL出来的进程进行时间监控.
如每秒监控一次, 若此PHP在进程列表中存在则进程未结束, 当超出时间后可以KILL掉, 并记录日志等后一步操作.