PHP - 我的电池脚本吃了我所有的记忆

时间:2017-01-24 23:16:07

标签: php hibernate linuxmint

我是一名刚开始编码的新手开发人员,大约一年前。我目前正在运行Linux Mint 18.1,我喜欢通过tmux窗口跟踪我的笔记本电脑的统计数据,其中包括Htop,Iotop,传感器等等。

我最近使用PHP创建了一个电池脚本,可以成功查看我想要的内容,但是我遇到了一个错误,我不确定如何打击。基本上我的脚本在运行时输出终端窗口中的电池状态,并且每秒更新一次。我的困境是,我把我的笔记本电脑放入休眠状态,醒来后,我发现内存错误的垃圾邮件,而我的计算机正在努力使用SIGKILL,我认为这是我的流氓脚本。

这是位于/var/log/php7.0-fpm.log中的长错误列表的示例

[2017年1月24日17:49:41]警告:[pool www] child 3368从开始0.007716秒后退出信号9(SIGKILL) [24-Jan-2017 17:49:41]注意:[pool www] child 3370开始

我相信这是因为我的循环工作方式。什么是更好的方法来执行这样的循环?

<?php

$true = 1;

while($true == 1){
    EchoStats();
    sleep(1);
    system('clear');
}

function EchoStats()
{
    $stats = GetBatStats();

    echo "Battery State: " . $stats[0] . "\n";
    echo "Battery Level: " . $stats[1] . "\n";
    if($stats[0] == 'discharging'){
        echo "Battery Time Left: " . $stats[2] . "\n";
    }
    if($stats[0] == 'charging'){
        echo "Time until fully charged: " . $stats[2] . "\n";
    }
}

function GetBatStats()
{
    $battPercent = exec("upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep 'percentage'");
    $battPercent = IsolateValue($battPercent);

    $battState = exec("upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep 'state'");
    $battState = IsolateValue($battState);

    if($battState == 'discharging'){
        $battEstTime = exec("upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep 'time to empty'");
        $battEstTime = IsolateValue($battEstTime);
    }
    if($battState == 'charging'){
        $battEstTime = exec("upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep 'time to full'");
        $battEstTime = IsolateValue($battEstTime);
    }

    return array($battState,$battPercent,$battEstTime);

}

function IsolateValue($var)
{
    $var = explode(':',$var);
    $var = $var[1];
    $var = str_replace(' ','',$var);
    $var = str_replace('hours',' hours',$var);
    $var = str_replace('minutes',' minutes',$var);

    return $var;
}

?>

0 个答案:

没有答案