Я играл с басром, и одна из вещей, которые я хочу видеть во все времена, - это использование моего процессора в процентах. Я решил установить эти данные в своем PS1. Проблема в том, что для точной оценки использования моего процессора мне нужно выполнять операции, требующие ожидания не менее 0,5 секунд.Как сделать работу функции в фоновом режиме в bash/заменить текст/использование ЦП
В результате этого моя новая командная строка отображается только в конце вычисления ЦП, через 0,5 секунды, что действительно неприемлемо. Чтобы справиться с этим, я подумал, что могу использовать поток для вычисления ЦП и показывать его только в конце, но я не знаю, как это сделать.
Одна из проблем заключается в том, что я отображаю другую информацию после процентного соотношения процессора, поэтому не знаю, можно ли даже задержать отображение ЦП, показывая остальную часть командной строки. Я подумал, что, может быть, я могу отобразить временную строку, такую как ??.??
, а затем заменить ее на реальное значение, но я не уверен, как это сделать, поскольку, если я быстро набираю команды, то позиция ??.??
может измениться (например, набрав ls 5 раз в строке очень быстро).
Возможно, есть еще более простое решение моей проблемы, например, вычисление процентного процента процессора другим способом?
Моего 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)%"
Рассматривали ли вы хранить результат в файле, таких как '/ tmp/cpu.log', сохраните' cpuf' r unning как задание (вызывая 'cpuf &' перед созданием псевдонима) и изменяя 'alias cpu =" cat /tmp/cpu.log "'? – pah
Почему вы используете 'cat'? 'awk' принимает имя файла в качестве параметра. Многочисленные дочерние процессы в вашей функции не будут сильно влиять на эффективность вашего процессора. – cdarke
Threadp ваше решение кажется очень хорошей идеей, я проверю его по утрам и отправлю решение, если оно мне подходит, спасибо. cdarke, ты очень прав, я тоже это изменю. – PiggyGenius