3

我一直在玩 bashrc,我一直想看到的一件事是我的 cpu 使用百分比。我决定在我的 PS1 中设置这些数据。问题是要准确估计我的 CPU 使用率,我需要执行需要等待至少 0.5 秒的操作。

结果,我的新命令行只显示在 CPU 计算结束时,即 0.5 秒后,这实在是不能接受。为了解决这个问题,我认为我可以使用一个线程来进行 CPU 计算并只在最后显示它,但我不知道该怎么做。

问题之一是我在 CPU 百分比之后显示其他信息,所以我不知道是否有可能延迟 CPU 显示同时仍显示命令行的其余部分。我想也许我可以显示一个临时字符串??.??,然后用实际值替换它,但我不知道该怎么做,因为如果我快速输入命令,那么它的位置??.??可能会改变(例如,在 a 中输入 ls 5 次排非常快)。

也许对我的问题有更简单的解决方案,例如以其他方式计算 CPU 百分比?

我的 CPU 百分比计算功能:

function cpuf(){
    NonIdle=0;Idle=0;Total=0;TotalD=0;Idled=0
    NonIdle=$((`cat /proc/stat | awk '/^cpu / {print$2+$3+$4+$7+$8+$9}'` - $NonIdle))
    Idle=$((`cat /proc/stat | awk '/^cpu / {print$5+$6}'` - $Idle))
    sleep 0.5
    NonIdle=$((`cat /proc/stat | awk '/^cpu / {print$2+$3+$4+$7+$8+$9}'` - $NonIdle))
    Idle=$((`cat /proc/stat | awk '/^cpu / {print$5+$6}'` - $Idle))
    Total=$((Idle+NonIdle))
    CPU=$(((Total-Idle)/Total))
    echo `echo "scale=2;($Total*100-$Idle*100)/$Total" | bc -l`
}

我如何在 bashrc 中调用它:

alias cpu="cpuf"
PS1+="(\[${MAGENTA}\]CPU $(cpu)%"
4

1 回答 1

2

这里没有必要重新发明轮子,Linux 已经负责在/proc/loadavg. 第一个数字是最后一分钟所有 cpu 的平均负载,所以我们只需要除以 cpu 的数量,我们可以通过读取来确定/proc/cpuinfo。将其滚入.bashrc我们得到:

.bashrc

...
# My fancy prompt, adjust as you like...
FANCY_PROMPT="$GREEN\u$YELLOW@\h:$PURPLE\w$BLUE$ $RESET"

CPUS=$( grep -c bogomips /proc/cpuinfo )

_prompt_command() {
    LOAD_AVG_1_MIN=$( cut -d ' ' -f 1 /proc/loadavg )
    PERCENT=$( echo "scale=0; $LOAD_AVG_1_MIN * 100 / $CPUS" | bc -l )
    PS1="CPU $PERCENT% $FANCY_PROMPT"
    true
}

PROMPT_COMMAND="_prompt_command"

正在使用:

在此处输入图像描述

所以 linux /proc/loadavg

于 2016-07-18T04:04:23.630 回答