Использование top
команды с перенаправлением работает нормально:
top > top.log
Теперь я хочу использовать grep для фильтрации определенной строки:
top | grep "my_program" > top.log
Но файл журнала останется пустым. Но grep выдает вывод при использовании
top | grep "my_program"
Где my_program
должен быть заменен работающей программой, чтобы увидеть некоторые результаты.
Почему мой подход не работает? И как я могу это исправить?
-b
вариантtop
или использоватьps
вместо этого.-b
не решил мою проблему, но решил некоторые проблемы с кодировкой. Спасибо.Ответы:
Я получаю то же поведение, которое вы описываете. На Ubuntu 11.10
не производит никакого вывода.
Я считаю, что причина этого в том, что grep буферизирует свой вывод. Чтобы GNU grep выводил вывод за строкой, используйте
--line-buffered
параметр:Смотрите также этот вопрос для других потенциальных решений.
источник
--line-buffered
решает проблему.-b
Вариант еще хороший совет от Льва Левицкого, тоже. Это решило некоторые проблемы кодирования с файлом журнала.Вы должны использовать:
«-n 1» запускается на вершине в течение одной итерации, а затем выходит вместо постоянного обновления каждые несколько секунд
так как вы просто ищете одну строку, хотя ps будет лучшим инструментом для использования.
источник
Мой обходной путь для этой проблемы был:
Таким образом, у меня может быть запущенный монитор в фоновом режиме для my_program и все результаты сохранены в файле top.log.
источник
Попробуй это:
Что значит
2>&1
?источник
Хотя оба работают на меня, я думаю, что совет Льва Левицкого правильный. Используйте
-b
аргумент.Есть большая вероятность, что проблема заключается в перенаправлении вывода, и вы ничего не получаете через stdout, поэтому попробуйте это:
Обратите внимание, что у вас могут возникнуть проблемы с буферизацией вывода. Ваша оболочка не будет постоянно записывать в файл, поэтому
top.log
заполнение может занять некоторое время .источник