我有一個程式會產生幾個子進程。
我想知道這個程式及其子程式正在建立、刪除和修改哪些檔案。
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 無論如何都有