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


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

   cat myfile | processor_application

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

Возможно, lsof?

Благодаря!


12
2018-01-31 16:49


Источник


Спасибо за ответы до сих пор! Однако я должен был быть более ясным: команда уже запущена. - wodow
Ах, да, тогда пв не очень удобно. Вы можете изменить исходный вопрос, чтобы сделать это более понятным. - Phil Hollenback
На самом деле в этом вопросе есть три больших отдельных ответа, поэтому я оставлю это как есть. - wodow
Подводя итог, они: 1. Используйте pv (до начала) 2. Используйте lsof -o (если поддерживаются смещения). 3. Посмотрите на значение wchar on / proc / <PID> / io, для известного PID кота обработать - wodow


Ответы:


Вы можете использовать ру для этого, например,

pv file | processor_application 

По мере того как pv проходит, stdin прямо на его stdout вам не нужно использовать cat.

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

/proc/<PID>/io

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


12
2018-01-31 16:59



Я только что видел ваше редактирование! Это прекрасно работает с учетом отсутствия (i) pv в цепочке, (ii) при работе. Благодаря! - wodow


Абсолютно! Просмотрщик труб это точно. Просто вставьте его в свой конвейер:

cat myfile | pv | processor_application

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

pv myfile | processor_application

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

input_process | pv -s 100M -p | processor_application

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


9
2018-01-31 17:01



Мне нравится пв - когда я помню, чтобы использовать его! Благодарю. - wodow
мне нравится pv когда он доступен :-) - voretaq7
Его довольно легко вставить pv в трубопровод, используя mkfifo а также gdb (четыре системных вызова с gdb's p). - grawity
@grawity вы не можете дразнить так. Напишите реальный ответ и продемонстрируйте - мне сейчас очень любопытно. - Phil Hollenback
Слишком большая часть взлома, чтобы быть ответом, но здесь. - grawity


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

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


6



Это вариант lsof, на который я смотрел. Но: что, если lsof -o не разрешено или недоступно в системе? - wodow
Если -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