Проблема, вероятно, может быть устранена установкой переменной $TERM
в screen. Попробуйте добавить term screen-256color
в ~/.screenrc
.
Если это не сработает, попробуйте добавить termcapinfo xterm ks@:ke@' в
~/.screenrc` также. Это может сломать некоторые другие клавиши, поэтому вам следует тщательно проверить это.
Вы должны использовать опцию --line-buffered
для grep
(, так как ваш вопрос помечен как "centos", вы наверняка используете GNU grep ).
По умолчанию grep
буферизация строк будет использоваться только тогда, когда вывод является терминалом (, точно так же, как функции stdio :printf, puts и т. д. ). Параметр --line-buffered
имеет приоритет над этим. GNU coreutils также имеет оболочку stdbuf (1 ), которая должна работать с любой динамически подключаемой программой, использующей stdio.
Вы можете использовать cat /proc/loadavg
с интервалами. Зачем вытаскивать его из top
? Он предназначен для активного мониторинга (в основном )и всегда будет использовать больше ресурсов, чем быстрое чтение loadavg
. Для списка процессов просто используйте ps
и отсортируйте с помощью флага —sort
. Например.
( while true ; do cat /proc/loadavg ; ps -aux | sort -nrk 3,3 | head -n 20 ; sleep 3 ; done ; ) | pipe...
или
( while true ; do cat /proc/loadavg ; ps -Ao user,uid,pid,comm,pcpu,tty —sort=-pcpu —no-headers | head -n 20 ; sleep 3 ; done ; ) | pipe...