Если у меня есть конвейерная команда, например
cat myfile | processor_application
где processor_application - это что-то, что читается по стандарту, частями, для обработки, можно ли увидеть, как далеко продвинулся файл cat?
Возможно, с помощью lsof?
Спасибо!
Ты можешь использовать pv сделать это например
pv file | processor_application
Поскольку pv передает это stdin прямо на stdout, вам не нужно использовать cat.
редактировать Поскольку ваша программа уже запущена, найдите PID cat
процесса, а затем просмотрите содержимое
/proc/<PID>/io
который сообщит вам, сколько байтов он записал - wchar.
Абсолютно! Просмотрщик труб делает именно это. Просто вставьте его в свой конвейер:
cat myfile | pv | processor_application
Вы можете оптимизировать cat
в приведенном выше примере:
pv myfile | processor_application
Который имеет то преимущество, что предоставляет фактический индикатор прогресса, поскольку pv может напрямую определять размер ввода. Если вы действительно используете pv в середине конвейера, вам необходимо самостоятельно указать размер файла, чтобы получить точный прогресс:
input_process | pv -s 100M -p | processor_application
Посетите веб-сайт, чтобы узнать о дополнительных параметрах настройки pv.
Если процесс уже запущен, lsof имеет size/offset
столбец, который может быть вам полезен - найдите PID процесса cat, который вы хотите проверить, а затем lsof -o -p [PID]
.
Если процесс еще не запущен, pv
как предлагали другие, это хороший вариант (при условии, что в вашей системе есть эта утилита).