Постоянно отслеживать файлы, открытые / доступные процессу

25

lsof -p 12345 выведет список всех файлов, открытых процессом, чей pid - 12345, но только на определенный момент времени.

Как мы можем непрерывно контролировать процесс от начала до конца (до тех пор, пока процесс не будет завершен), чтобы перечислять / показывать каждый отдельный файл, к которому процесс обращался в течение всей его жизни?

MA1
источник

Ответы:

31

Попробуй с strace -p 12345; он должен делать то, что вы пытаетесь достичь.

Вывод может быть отфильтрован для отображения только открытых файлов ( комментарий Дэна Д. ):

strace -e open -p 12345

Примечание: вы также можете отслеживать быстро запущенные процессы с помощью strace -e open <command>.

Йенс Эрат
источник
вывод не дружелюбный и лишних лишних вещей.
MA1
Вы можете исправить это с помощью трубопровода strace -p {pid} | grep -i "Open" | tee files_opened.log. Ключ grep, который позволяет вам фильтровать вывод для системного вызова, который вы хотите (например open()).
11
@Ninefingers На самом деле straceможет сделать это лучше, чем grepс -eопцией:strace -e open
Дэн Д.
@DanD о да, оф :)
Когда я убиваю команду strace, она также убивает отслеживаемую вещь. Почему это происходит (Cygwin)?
CMCDragonkai
6

Новая утилита fatrace сделает это: https://launchpad.net/fatrace/

sudo fatrace | grep '(6514)'

Не используйте опцию -p, это означает противоположность значения в lsof или других утилитах.

Брайс
источник
3

Это зациклит повторный запуск вашей команды и очистку экрана каждый раз:

watch "lsof -p 12345"

ВНИМАНИЕ: это пропустит быстрый доступ к файлам и подходит только для просмотра давних файлов

jcalfee314
источник
2
Это несколько неуклюже по сравнению с другим использованием ответа strace.
Дэвид Фёрстер
1
Это неточное решение - процесс может использовать файлы между выполнениямиlsof
Дор
@Dor вы можете установить время lsof до 1 секунды и повысить его точность. Хотя это неуклюже по сравнению с другими, вы ошибаетесь в том, что это неточное решение.
Джордон Бедвелл
Если вы рассматриваете длинную файловую операцию (например, резервное копирование базы данных), это может быть хорошей простой альтернативой.
jcalfee314