複数の子プロセスを生成するプログラムがあります。
このプログラムとその子プログラムがどのファイルを作成、削除、変更しているかを知りたいです。
inotifywait
どのファイルがアクセスされているかはわかりますが、どのプロセスがそれを実行しているかはわかりません。また、モニターを設定するには、ファイルがどこに作成されているかを知る必要があります。auditctl
どのプロセスがファイルを変更したかをログに記録できますが、ログ記録を設定するには、ファイルがどこにあるかを知る必要があります。lsof
すべてのファイルを教えてくれますが、リアルタイムの追跡には適したソリューションではないようです。
どのファイルが操作されるかを事前に知らなくても、プログラムのファイル操作を監視できるものはありますか?
答え1
strace
Linux では、次の種類のイベントを監視するために使用できます。
strace -f -p <PID> -e trace=file
Solaris では、 を使用できます。Solaris 11 の にデフォルトでインストールされているdtrace
DTraceToolkit ツール をご覧ください。opensnoop
/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はとにかくある