我是一名刚开始编码的新手开发人员,大约一年前。我目前正在运行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;
}
?>