Überwachen Sie die E/A eines Programms

Überwachen Sie die E/A eines Programms

Ich habe ein Programm, das mehrere untergeordnete Prozesse erzeugt.

Ich möchte wissen, welche Dateien dieses Programm und seine untergeordneten Programme erstellen, löschen und ändern.

  • inotifywaitkann mir sagen, auf welche Dateien zugegriffen wird, aber nicht, welcher Prozess dies tut. Und ich muss wissen, wo die Dateien erstellt werden, um den Monitor einzurichten.

  • auditctlermöglicht mir, zu protokollieren, welche Prozesse eine Datei ändern, aber um die Protokollierung einzurichten, muss ich wiederum wissen, wo sich die Dateien befinden.

  • lsofteilt mir alle Dateien mit, scheint aber keine gute Lösung für die Echtzeitverfolgung zu sein.

Gibt es etwas, mit dem ich die Dateimanipulation eines Programms überwachen kann, ohne im Voraus zu wissen, welche Dateien manipuliert werden?

Antwort1

Unter Linux können Sie stracefolgende Ereignisse überwachen:

strace -f -p <PID> -e trace=file

Unter Solaris können Sie verwenden dtrace. Sehen Sie sich das Tool DTraceToolkit an opensnoop, das unter Solaris 11 standardmäßig unter installiert ist /usr/dtrace/DTT/Bin/opensnoop.

/usr/dtrace/DTT/Bin/opensnoop -p <pid>

Antwort2

Für Linux: opensnoop von Brendengregs Perf-Tools sollte den Job erledigen https://github.com/brendangregg/perf-tools

Für Solaris gibt es Dtrace sowieso

verwandte Informationen