Я протестировал следующую команду, но она не работает.
$> top -b -d 1 | grep java > top.log
Он не использует стандартную ошибку. Я проверил, что он использует стандартный вывод, но top.log всегда пуст. Почему это?
Ответ 1
По умолчанию grep выводит буферы, что означает, что ничего не будет записано в top.log, пока вывод grep не будет превышать размер буфера (который может различаться в разных системах).
Сообщите grep использовать буферизацию строки на выходе. Попробуйте:
top -b -d 1 | grep --line-buffered java > top.log
Ответ 2
В моей встроенной машине grep не имел опции -line-buffered. Поэтому я использовал это обходное решение для себя:
while :;do top -b -n 1 | grep java >> top.log;done &
Таким образом, у меня может быть работающий монитор в фоновом режиме для программы, такой как "java", и сохранить все результаты в файле top.log.