我有一个程序会产生几个子进程。
我想知道这个程序及其子程序正在创建、删除和修改哪些文件。
inotifywait
可以告诉我哪些文件正在被访问,但不能告诉我哪个进程正在访问。我必须知道在哪里创建文件才能设置监视器。auditctl
会让我记录哪些进程修改了文件,但是,我必须知道文件在哪里才能设置日志记录。lsof
会告诉我所有文件,但似乎不是实时跟踪的好解决方案。
有没有什么可以让我在不知道哪些文件将被操作的情况下监视程序的文件操作?
答案1
在 Linux 上,您可以用来strace
监视这些类型的事件:
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:Brendengreg 的 perf-tools 中的 opensnoop 应该可以完成这项工作 https://github.com/brendangregg/perf-tools
对于 Solaris Dtrace 无论如何都有