На Linux, как я могу увидеть, как далеко через файл процесс?


12

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

   cat myfile | processor_application

где CPU_application - это что-то, читающее из стандартного, в блоках, для обработки, возможно ли увидеть, как далеко прошел файл cat?

Возможно, с помощью lsof?

Благодарность!


Спасибо за ответы до сих пор! Тем не менее, я должен был быть более понятным: команда уже выполняется.
— Вдова

Ах да, тогда пв не очень удобно. Вы можете отредактировать исходный вопрос, чтобы сделать его более понятным.
— Фил Холленбек

На самом деле, сейчас есть три отличных ответа на этот вопрос, поэтому я оставлю все как есть.
— Вдова

1
Подводя итог, они: 1. Используйте pv (перед началом) 2. Используйте lsof -o (если смещения поддерживаются) 3. посмотрите значение wchar в / proc / <PID> / io, для известного PID кошки процесс
— вдова

Ответы:


12

Вы можете использовать PV, чтобы сделать это, например,

pv file | processor_application

Когда pv передает свой стандартный вывод прямо в стандартный вывод, вам не нужно использовать cat.

Редактировать Поскольку ваша программа уже запущена, найдите PID catпроцесса, а затем посмотрите на содержимое

/proc/<PID>/io

который скажет вам, сколько байтов он написал - wchar.


Я только что видел твою правку! Это прекрасно работает, учитывая отсутствие (i) pv в цепочке, (ii) lsof -o работает. Благодарность!
— Вдова

9

Абсолютно! Pipe Viewer делает это точно. Просто вставьте его в свой конвейер:

cat myfile | pv | processor_application

Вы можете оптимизировать catв приведенном выше примере:

pv myfile | processor_application

Который имеет преимущество в предоставлении фактического индикатора прогресса, так как pv может напрямую определять размер ввода. Если вы используете pv в середине конвейера, вам нужно указать размер файла самостоятельно, чтобы получить точный прогресс:

input_process | pv -s 100M -p | processor_application

Проверьте веб-сайт для получения дополнительных параметров для настройки PV.


Мне нравится, pvкогда это доступно :-)
— voretaq7

Вставить pvв конвейер довольно просто , используя mkfifoи gdb(четыре системных вызова с GDB p).
— user1686

@ Grawity вы не можете так дразнить. Напишите реальный ответ и продемонстрируйте - мне очень любопытно сейчас.
— Фил Холленбек

2
Слишком много взлома, чтобы быть ответом, но здесь.
— user1686

6

Если процесс уже запущен, у lsof есть size/offsetстолбец, который может быть вам полезен - найдите PID процесса cat, который вы хотите проверить, а затем lsof -o -p [PID].

Если процесс еще не запущен, pvкак предложили другие, это хороший вариант (при условии, что ваша система имеет эту утилиту).


Это вариант lsof, на который я смотрел. Но: что если lsof -o не разрешен или недоступен в системе?
— Вдова

Если -oв вашей системе не работает, я думаю, что вы в значительной степени не уверены в использовании lsof: - / (я предполагаю, что вы запускаете lsof как пользователь, запустивший catпроцесс, или как root?)
— voretaq7

Да, пробовал оба. Я ищу причины, по которым lsof предупреждает: o сейчас недоступно ...
— wodow

Часто задаваемые вопросы по lsof, отраженные по адресу gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ , подразумевают в пункте / вопросе 3.43.2.3, что lsof -o невозможна в Linux! Я предполагаю, что это слишком широко, так как другие пользователи, похоже, используют lsof -o
— wodow
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.