I want to see CPU usage.
I used this command :
top -bn1 | grep "Cpu(s)" |
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" |
awk '{print 100 - $1}'
But it returns 100%.
What's the correct way?
I want to see CPU usage.
I used this command :
top -bn1 | grep "Cpu(s)" |
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" |
awk '{print 100 - $1}'
But it returns 100%.
What's the correct way?
Why not use htop [interactive process viewer]? In order to install it, open a terminal window and type:
sudo apt-get install htop
Also see man htop for more information and how to set it up.

To get cpu usage, best way is to read /proc/stat file. See man 5 proc for more help.
There is a useful script written by Paul Colby i found here
#!/bin/bash
# by Paul Colby (http://colby.id.au), no rights reserved ;)
PREV_TOTAL=0
PREV_IDLE=0
while true; do
CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
unset CPU[0] # Discard the "cpu" prefix.
IDLE=${CPU[4]} # Get the idle CPU time.
# Calculate the total CPU time.
TOTAL=0
for VALUE in "${CPU[@]:0:4}"; do
let "TOTAL=$TOTAL+$VALUE"
done
# Calculate the CPU usage since we last checked.
let "DIFF_IDLE=$IDLE-$PREV_IDLE"
let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
echo -en "\rCPU: $DIFF_USAGE% \b\b"
# Remember the total and idle CPU times for the next check.
PREV_TOTAL="$TOTAL"
PREV_IDLE="$IDLE"
# Wait before checking again.
sleep 1
done
save it to cpu_usage, add execute permission chmod +x cpu_usage and run:
./cpu_usage
to stop the script, hit Ctrl+c
I found a solution which works nicely, here it is:
top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'
I am not sure but it looks to me that the first iteration of top with the -n parameter returns some dummy data, always the same in all my tests.
If I use -n2 then the second frame is always dynamic. So the sequence is:
top -bn2grep '%Cpu'grep -P '(....|...) id,'Hope it helps, Paul