Handbuch zur dynamischen Ablaufverfolgung in Solaris

Prüfpunkte

Die proc-Prüfpunkte sind in Tabelle 25–1 beschrieben.

Tabelle 25–1 proc-Prüfpunkte

Prüfpunkt 

Beschreibung 

create

Prüfpunkt, der beim Erzeugen eines Prozesses mit fork(2), forkall(2), fork1(2) oder vfork(2) ausgelöst wird. Auf psinfo_t des neuen untergeordneten Prozesses wird mit args[0] gezeigt. Sie können vfork von den anderen fork-Varianten unterscheiden, indem Sie in der pr_flag-Komponente von lwpsinfo_t des den neuen Prozess erzeugenden Threads auf PR_VFORKP prüfen. Sie können fork1 von forkall unterscheiden, indem Sie die pr_nlwp-Komponenten aus psinfo_t (curpsinfo) des übergeordneten sowie aus psinfo_t (args[0]) des untergeordneten Prozesses untersuchen. Da der Prüfpunkt create erst nach der erfolgreichen Erzeugung des Prozesses ausgelöst wird und die LWP-Erzeugung Teil der Erzeugung eines Prozesses ist, wird lwp-create pro LWP ausgelöst, der mit der Prozesserzeugung entsteht, und zwar bevor der Prüfpunkt create für den neuen Prozess ausgelöst wird.

exec

Prüfpunkt, der ausgelöst wird, wenn ein Prozess mit einer Variante des exec(2)-Systemaufrufs ein neues Prozessabbild lädt: exec(2), execle(2), execlp(2), execv(2), execve(2), execvp(2). Der Prüfpunkt exec wird ausgelöst, bevor das Prozessabbild geladen wird. Prozessvariablen wie execname und curpsinfo enthalten folglich den Prozessstatus vor dem Laden des Abbilds. Kurz nach der Auslösung des Prüfpunkts exec wird in demselben Thread entweder exec-failure oder exec-success ausgelöst. Auf den Pfad des neuen Prozessabbilds zeigt args[0].

exec-failure

Prüfpunkt, der ausgelöst wird, wenn eine exec(2)-Variante fehlschlägt. Der Prüfpunkt exec-failure wird erst nach der Auslösung des Prüfpunkts exec in demselben Thread ausgelöst. Der Wert von errno(3C) steht in args[0] bereit.

exec-success

Prüfpunkt, der ausgelöst wird, wenn eine exec(2)-Variante erfolgreich war. Wie exec-failure wird auch exec-success erst nach der Auslösung des Prüfpunkts exec in demselben Thread ausgelöst. Wenn der Prüfpunkt exec-success ausgelöst wird, enthalten Prozessvariablen wie execname und curpsinfo bereits den Prozessstatus nach dem Laden des neuen Prozessabbilds.

exit

Prüfpunkt, der beim Beenden des aktuellen Prozesses ausgelöst wird. Der Grund für die Beendigung, der in Form einer der SIGCHLD siginfo.h(3HEAD)-Codes ausgedrückt wird, ist in args[0] enthalten.

fault

Prüfpunkt, der ausgelöst wird, wenn in einem Thread ein Maschinenfehler auftritt. Der Fehlercode (gemäß der Definition in proc(4)) befindet sich in args[0]. Auf die Struktur siginfo des Fehlers wird mit args[1] gezeigt. Nur Fehler, die ein Signal auslösen, können auch den Prüfpunkt fault auslösen.

lwp-create

Prüfpunkt, der bei der Erzeugung eines LWP, in der Regel als Folge von thr_create(3C) ausgelöst wird. Auf lwpsinfo_t des neuen Threads wird mit args[0] gezeigt. Auf psinfo_t des Prozesses, der den Thread enthält, wird mit args[1] gezeigt.

lwp-start

Prüfpunkt, der innerhalb des Kontexts eines neu erzeugten LWP ausgelöst wird. Der Prüfpunkt lwp-start wird vor der Ausführung etwaiger Anweisungen auf Benutzerebene ausgelöst. Ist der LWP der erste LWP im Prozess, wird zunächst der Prüfpunkt start und anschließend lwp-start ausgelöst.

lwp-exit

Prüfpunkt, der ausgelöst wird, wenn ein LWP entweder als Reaktion auf ein Signal oder auf einen ausdrücklichen thr_exit(3C)-Aufruf beendet wird.

signal-discard

Prüfpunkt, der ausgelöst wird, wenn ein Signal an einen Single-Threaded-Prozess gesendet und vom Prozess freigegeben (unblock) und ignoriert wird. Unter diesen Bedingungen wird das Signal bei der Generierung verworfen. lwpsinfo_t und psinfo_t des Zielprozesses und Threads sind in args[0] bzw. args[1] enthalten. Die Signalnummer befindet sich in args[2].

signal-send

Prüfpunkt, der beim Senden eines Signals an einen Thread oder Prozess ausgelöst wird. Der Prüfpunkt signal-send wird im Kontext des sendenden Prozesses und Threads ausgelöst. lwpsinfo_t und psinfo_t des Empfängerprozesses und Threads sind in args[0] bzw. args[1] enthalten. Die Signalnummer befindet sich in args[2]. Auf signal-send folgen im empfangenden Prozess und Thread immer signal-handle oder signal-clear.

signal-handle

Prüfpunkt, der unmittelbar vor der Behandlung eines Signals durch einen Thread ausgelöst wird. Der Prüfpunkt signal-handle wird im Kontext des Threads ausgelöst, der das Signal behandelt. Die Signalnummer befindet sich in args[0]. In args[1] befindet sich ein Zeiger auf die zum Signal gehörige Struktur siginfo_t. Der Wert von args[1] ist NULL, wenn keine siginfo_t-Struktur existiert oder in der Signalbehandlungsroutine das Flag SA_SIGINFO nicht gesetzt ist. Die Adresse des Signal-Handlers im Prozess ist in args[2] enthalten.

signal-clear

Prüfpunkt, der ausgelöst wird, wenn ein anstehendes Signal gelöscht wird, da der Ziel-Thread in sigwait(2), sigwaitinfo(3RT) oder sigtimedwait(3RT) auf das Signal wartete. Unter diesen Bedingungen wird das anstehende Signal gelöscht und die Signalnummer an den Aufrufer zurückgereicht. Die Signalnummer befindet sich in args[0]. signal-clear wird im Kontext des zuvor wartenden Threads ausgelöst.

start

Prüfpunkt, der innerhalb des Kontexts eines neu erzeugten Prozesses ausgelöst wird. Der Prüfpunkt start wird vor der Ausführung etwaiger Anweisungen auf Benutzerebene im Prozess ausgelöst.