Як в Linux я бачу, наскільки далеко проходить файл?


13

Якщо у мене є трубопровідна команда типу

   cat myfile | processor_application

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

Можливо, використовуючи lsof?

Дякую!


Дякую за відповіді поки що! Однак я мав би бути зрозумілішим: команда вже запущена.
вдови

Ага так, тоді ПВ не так зручно. Ви можете відредагувати своє початкове запитання, щоб зробити це більш зрозумілим.
Філ Холленбек

Насправді зараз у цьому питанні є три великі окремі відповіді, тому я залишу його таким, яким він є.
вдови

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

Відповіді:


13

Ви можете використовувати pv для цього, наприклад

pv file | processor_application

Як передає ПВ, це stdin безпосередньо до stdout, вам не потрібно використовувати кішку.

Змінити Оскільки ваша програма вже запущена, знайдіть 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коли це доступно :-)
voretaq7

Вставити pvв конвеєр досить просто за допомогою mkfifoі gdb(чотири систематичні дзвінки з gdb p).
користувач1686

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

2
Занадто багато хак, щоб відповісти, але тут.
користувач1686

6

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

Якщо процес ще не працює, pvяк пропонують інші, це хороший варіант (якщо припустити, що ваша система має цю корисність).


Це варіант lsof, який я переглянув. Але: що робити, якщо lsof -o не дозволено або недоступно в системі?
вдови

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

Так, спробували обидва. Я шукаю причини, по яких попереджає -o як зараз недоступний ...
wodow

Питання lsof FAQ, відображене в 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.