Вы можете использовать команду slabtop для просмотра того, какие объекты slab используются ядром.
Также вы можете проверить вывод / proc / meminfo
Найдите эти две строки в выводе
Slab: 68136 kB
SReclaimable: 21208 kB
В приведенном выше примере показано, что ядро использует 68 МБ блочного кэша и 21 МБ можно освободить. Для восстановления вы можете использовать технику, описанную здесь https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables
echo 2 > /proc/sys/vm/drop_caches
Да, в bash вы можете использовать круглые скобки:
(A && B || C) | D
Таким образом, вывод A && B || C
будет передан в D
.
Вы можете написать это как
if A; then B; else C; fi | D
Вы говорите, что хотите запустить либо B
, либо C
, но A && B || C
этого не дает. Если A
выполнится, но B
выполнится и не выполнится, то будет выполнено C
.
Примечание 1: если вы можете каким-то образом гарантировать, что B
всегда будет успешным, и хотите придерживаться короткой версии, то я бы все же выбрал
{ A && B || C; } | D
вместо ( ... )
, поскольку последняя без необходимости заставляет создавать новую под-оболочку, которая может быть оптимизирована, а может и нет.
Примечание 2: обе формы предполагают, что A
не производит никакого вывода, что верно в вашем примере, но не обязательно так в общем случае. Этого можно избежать
A; if [ "$?" -eq 0 ]; then B; else C; fi | D
Ответ акцептора правильный, но он не охватывает потенциальный случай использования, чтобы не иметь выход A
в качестве входа D
. Для этого вам понадобится перенаправление потока на A
в зависимости от ваших потребностей.
Если вы хотите отбросить вывод A
в любом случае:
{ A >/dev/null && B || C; } | D
Если вы хотите увидеть вывод A
на терминале:
{ A >/dev/tty && B || C; } | D
Если вам нужен вывод A
как вход последующей команды E
, вам понадобится дополнительная группа команд и перенаправление потока:
{ { A >&3 && B || C; } | D; } 3>&1 | E
Если все это кажется вам слишком заумным (как и мне), я рекомендую использовать специальную переменную shell для статуса выхода A
и работать с ней:
A
if [ $? -eq 0 ]; then
B
else
C
fi |
D
Если вы хотите быть более кратким, но не слишком заумным, я предлагаю следующее:
A; { [ $? -eq 0 ] && B || C; } | D
(См. также последнюю часть ответа hvd, которую я не заметил, когда писал свой первоначальный ответ)
.