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


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.