Назад | Перейти на главную страницу

В Linux, как я могу увидеть, как далеко от файла находится процесс?

Если у меня есть конвейерная команда, например

   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 как предлагали другие, это хороший вариант (при условии, что в вашей системе есть эта утилита).