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


25

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

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


Ответы:


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"

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


2
Это несколько неуклюже по сравнению с другим использованием ответа strace.
— Дэвид Фёрстер

1
Это неточное решение - процесс может использовать файлы между выполнениямиlsof
— Дор

@Dor вы можете установить время lsof до 1 секунды и повысить его точность. Хотя это неуклюже по сравнению с другими, вы ошибаетесь в том, что это неточное решение.
— Джордон Бедвелл

Если вы рассматриваете длинную файловую операцию (например, резервное копирование базы данных), это может быть хорошей простой альтернативой.
— jcalfee314
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.