Почему «slabtop -o» возвращает только первые 23 строки при передаче команды по конвейеру?

Почему «slabtop -o» возвращает только первые 23 строки при передаче команды по конвейеру?

Я пытался разобрать вывод slabtop -oс помощью awk, чтобы вычислить сумму размера кэша, но когда вывод передается по конвейеру, он возвращает только первые 23 строки. Я пробовал это на Ubuntu и Centos.

# slabtop --version
slabtop from procps-ng 3.3.10
# slabtop -o | wc -l
23

Почему при передаче команды по конвейеру возвращаются только первые 23 строки?

решение1

slabtop, даже с -o,всегда ограничивается одним экраном вывода. Обычно он делает это, спрашивая терминал о его размере, но когда его стандартный вывод не является терминалом,предполагается, что экран имеет 80 столбцов и 24 строкии выводит только 23 строки (чтобы избежать прокрутки).

Этотс тех пор как было исправлено, и исправление присутствует в procps-ngверсии 3.3.13 и более поздних.

решение2

Просто он жестко запрограммирован на работу таким образом, когда вывод не является терминалом.

если вы все еще хотите использовать перенаправление и получить больше строк, вы можете использовать , scriptчтобы обмануть slabtop, думая, что его вывод печатается на терминале. Вы можете добавить sttyповерх этого, чтобы изменить параметры псевдотерминала и установить свой собственный лимит для выводимых строк.

# slabtop -o | wc -l
23
# script -q -c "slabtop -o" /dev/null | wc -l
46
# script -q -c "stty rows 999; slabtop -o" /dev/null | wc -l
147

В качестве альтернативы вы можете просто получить информацию непосредственно из /proc/slabinfoфайла, который также используется сам по slabtopсебе.

Связанный контент