Wenn ich renne
%Vor%und dann in einem anderen Terminallauf
%Vor%im iosnoop-Terminal sehe ich:
%Vor%Was sind die Fragezeichen in der Nähe von ruby im Pfad zu den Dateien behandelt:
%Vor%? Und wie kann ich den absoluten Pfad für alle diese Dateien finden?
Zusätzliche Frage - warum sind die Fehler hier:
%Vor%?
Die kurzen Antworten sind:
Eine Erklärung dieser Punkte erfordert etwas Vertrautheit mit DTrace; Beginnen Sie gegebenenfalls mit der Einführung in die Solaris-Version .
iosnoop
ist ein Skript, das die DTrace-Beobachtbarkeit ausnutzt
Rahmen. Insbesondere wird der io
provider start
verwendet.
und done
Sonden; Die Startsonde legt die bufinfo_t
einer Anfrage offen.
Das devinfo_t
des Zielgeräts und die entsprechenden Dateien
fileinfo_t
. Der fileinfo_t
ist kein nativer Darwin-Typ:
Es ist eine Struktur, die von dtrace (1) zur Verfügung gestellt wird
bequeme Abstraktion einer Datei zum Vorteil der Benutzer.
Zum Beispiel ist unter seinen Mitgliedern fi_pathname
, die
sollte den vollständigen Pfadnamen einer Datei angeben.
Mit einer abstrahierten Beschreibung werden Benutzer und ihre Benutzer geschützt Skripte, aus Kenntnis und Änderungen des zugrunde liegenden Implementierung des Betriebssystems. In der Theorie erlaubt es auch a einzelnes Skript, das auf verschiedenen Betriebssystemen ausgeführt wird zusammen.
Ein fileinfo_t wird dynamisch erstellt und befüllt
mit einem DTrace Übersetzer beschrieben in /usr/lib/dtrace/io.d
.
Dies zeigt die Transformation von den OS-spezifischen Typen
zur Abstraktion. Im Falle von Snow Leopard sehe ich das
fi_pathname
wird aus der Zeichenfolge "?? /" gefolgt von
einige Derivate des IO-Puffers. Ich bin kein Darwin-Experte, aber
Ich folge daraus, dass es einfach keine vollständigen Pfadnamen in seinem Verzeichnis aufzeichnet
vnodes. Dies ist also der Ursprung des "??" in der Ausgabe
von deinem Drehbuch und auch der Grund, warum ich das Absolute vermute
Pfadnamen sind nicht verfügbar.
Zum Schluss Ihre DTrace-Fehler. Aus welchen Gründen auch immer, Apple's Hafen von DTrace ist subtil verkrüppelt in dass es die Verfolgung ausschließt von verschiedenen Prozessen, und die Fehlermeldung, die Sie sehen, ist ein charakteristisches Symptom. Insbesondere geht es um die Beschwerde die Zeile
%Vor% und es stellt sich heraus, dass (wieder, auf Snow Leopard), versucht zu bewerten
uid
auf einem der launchd
, diskimages-help
und kernel_task
Prozesse führen genau zu diesem Fehler. Ich nehme an, dass diese
Prozesse sind "außerhalb der Grenzen" und die Fehler, die Sie sehen, sind
die Folgen von Apples Modifikationen.
Während die obige Antwort einen guten technischen Hintergrund bietet, wenn Sie nur den vollständigen Pfadnamen der geöffneten Dateien erhalten wollen, kann ich dies mit rohen DTrace unter OS X über:
machen %Vor%Dies zeigt an, dass die Datei geöffnet, aber nicht gelesen oder geschrieben wird. Ich habe das von Brendan Greggs praktischer DTrace One Liners Seite: Ссылка
Leider verstehe ich immer noch nicht, warum iosnoop nicht den vollen Pfad angibt, wenn es theoretisch möglich erscheint.