Handbuch zur dynamischen Ablaufverfolgung in Solaris

Ausschalten von dtrace(1M)-Interferenzen

Wenn Sie jeden Aufruf des write(2)-Systemaufrufs verfolgen, erhalten Sie eine Kette aufeinander folgender Ausgaben. Mit jedem Aufruf von write() ruft der Befehl dtrace(1M) während der Anzeige der Ausgabe write() auf usw. Diese Rückmeldungsschleife ist ein gutes Beispiel dafür, wie der Befehl dtrace in die gewünschten Daten eingreifen kann. Die Aufzeichnung dieser unerwünschten Daten lässt sich durch ein einfaches Prädikat vermeiden:

syscall::write:entry
/pid != $pid/
{
	printf("%s", stringof(copyin(arg1, arg2)));
}

Die Makrovariable $pid wird durch die Prozess-ID des Prozesses ersetzt, der die Prüfpunkte aktiviert hat. Die Variable pid enthält die Prozess-ID des Prozesses, dessen Thread auf der CPU lief, auf der der Prüfpunkt ausgelöst wurde. Das Prädikat /pid != $pid/ gewährleistet deshalb, dass das Skript keine Ereignisse in Verbindung mit der Ausführung des Skripts selbst verfolgt.