Если у меня есть команда, такая как
cat myfile | processor_application
где CPU_application - это что-то, читающее из стандартного, в блоках, для обработки, возможно ли увидеть, как далеко прошел файл cat?
Возможно, с помощью lsof?
Благодарность!
Ответы:
Вы можете использовать PV, чтобы сделать это, например,
pv file | processor_application
Когда pv передает свой стандартный вывод прямо в стандартный вывод, вам не нужно использовать cat.
Редактировать Поскольку ваша программа уже запущена, найдите PID
cat
процесса, а затем посмотрите на содержимое/proc/<PID>/io
который скажет вам, сколько байтов он написал - wchar.
источник
Абсолютно! Pipe Viewer делает это точно. Просто вставьте его в свой конвейер:
Вы можете оптимизировать
cat
в приведенном выше примере:Который имеет преимущество в предоставлении фактического индикатора прогресса, так как pv может напрямую определять размер ввода. Если вы используете pv в середине конвейера, вам нужно указать размер файла самостоятельно, чтобы получить точный прогресс:
Проверьте веб-сайт для получения дополнительных параметров для настройки PV.
источник
pv
когда это доступно :-)pv
в конвейер довольно просто , используяmkfifo
иgdb
(четыре системных вызова с GDBp
).Если процесс уже запущен, у lsof есть
size/offset
столбец, который может быть вам полезен - найдите PID процесса cat, который вы хотите проверить, а затемlsof -o -p [PID]
.Если процесс еще не запущен,
pv
как предложили другие, это хороший вариант (при условии, что ваша система имеет эту утилиту).источник
-o
в вашей системе не работает, я думаю, что вы в значительной степени не уверены в использованииlsof
: - / (я предполагаю, что вы запускаете lsof как пользователь, запустившийcat
процесс, или как root?)