Перенаправление вывода не работает с верхним каналом в grep

Проблема, вероятно, может быть устранена установкой переменной $TERM в screen. Попробуйте добавить term screen-256color в ~/.screenrc.

Если это не сработает, попробуйте добавить termcapinfo xterm ks@:ke@' в ~/.screenrc` также. Это может сломать некоторые другие клавиши, поэтому вам следует тщательно проверить это.

3
27.03.2019, 12:19
2 ответа

Вы должны использовать опцию --line-bufferedдля grep(, так как ваш вопрос помечен как "centos", вы наверняка используете GNU grep ).

По умолчанию grepбуферизация строк будет использоваться только тогда, когда вывод является терминалом (, точно так же, как функции stdio :printf, puts и т. д. ). Параметр --line-bufferedимеет приоритет над этим. GNU coreutils также имеет оболочку stdbuf (1 ), которая должна работать с любой динамически подключаемой программой, использующей stdio.

3
27.01.2020, 21:24

Вы можете использовать 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...

-1
27.01.2020, 21:24

Теги

Похожие вопросы