У меня есть программа, которая порождает несколько дочерних процессов.
Я хочу знать, какие файлы эта программа и ее дочерние программы создают, удаляют и изменяют.
inotifywait
может сказать мне, к каким файлам осуществляется доступ, но не может сказать, какой процесс это делает. И мне нужно знать, где создаются файлы, чтобы настроить монитор.auditctl
позволит мне регистрировать, какие процессы изменяют файл, но, опять же, мне нужно знать, где находятся файлы, чтобы настроить ведение журнала.lsof
сообщит мне обо всех файлах, но, похоже, это не лучшее решение для отслеживания в реальном времени.
Есть ли что-то, что позволит мне отслеживать манипуляции с файлами программы, не зная заранее, какие именно файлы будут подвергаться манипуляциям?
решение1
strace
В Linux для мониторинга таких событий можно использовать :
strace -f -p <PID> -e trace=file
В Solaris вы можете использовать dtrace
. Взгляните на инструмент DTraceToolkit opensnoop
, который установлен по умолчанию в Solaris 11 в /usr/dtrace/DTT/Bin/opensnoop
.
/usr/dtrace/DTT/Bin/opensnoop -p <pid>
решение2
Для Linux: opensnoop из Perf-tools от Brendengreg должен подойти https://github.com/brendangregg/perf-tools
Для Solaris Dtrace есть в любом случае