2013-03-27 2 views
2

Есть ли способ выяснить, где в файле, из которого читается программа? Похоже, что можно справиться с strace или dtrace?Отслеживание хода выполнения программы через файл?

Для выяснения вопроса и дать мотивацию, что у меня есть файл журнала 10GB и я подсчета количества уникальных линий:

$ cat log.txt | sort | uniq | wc -l

Могу ли я проверить, где в файле cat находится в настоящее время, эффективно давая ход выполнения команды? Использование lsof, я не могу показаться, чтобы получить смещение последнего чтения файла, который я думаю, что будет делать трюк:

$ lsof log.txt 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF  NODE NAME 
cat  16021 erik 3r REG 0,22 13416118210 1078133219 

Изменить: Я извиняюсь, пример я дал слишком узок и не попадает в точку , В идеале, для произвольной программы, я хотел бы видеть, где в файлах читаются (независимо от трубы).

+0

Итак, вы хотите отследить ввод-вывод стороннего процесса? Я не вижу причины для того, чтобы следить за ходом кошки. Есть ли более реальное объяснение того, что вы на самом деле после? –

+0

Это мое реальное объяснение. Я выполнял эту команду около 30 минут, и было бы неплохо увидеть прогресс, достигнутый в файле. Другой пример: пользователь загружает большой файл с веб-сервера, как я могу проверить, где последний прочитал, чтобы определить ход загрузки? – erikreed

ответ

1

Вы можете делать то, что хотите, с помощью progresscommand. Он показывает прогресс инструментов coreutils, таких как cat или другие программы при чтении их файла.

Информация о файлах и смещениях доступна в Linux в /proc/<PID>/fd и /proc/<PID>/fdinfo.

+0

Это замечательно - спасибо. – erikreed

2

Вместо кошки:

pv log.txt | sort | uniq | wc -l 

Трубы с ФВ:

SIZE=$(ls -l log.txt | awk '{print $5}'); cat log.txt | sort | pv -s $SIZE | uniq | wc -l 
+0

Удивительный, это хороший, когда дело обходит. Но что, если трубопровод невозможен? например другой пользователь запускает процесс, или программа не читает stdin. Изменить: также для этого требуется установка pv, что может быть не идеальным при любых обстоятельствах. – erikreed

+0

@erikreed Идея. – kjprice

1

Если пример действительно ваш случай использования, то я бы рекомендовал pipe viewer. example image from pv's website

Смежные вопросы