Welche Signale sendet OS X für die Befehle „Beenden“ und „Sofort beenden“?

Welche Signale sendet OS X für die Befehle „Beenden“ und „Sofort beenden“?

Was passiert hinter den Kulissen, wenn ein Benutzer von außerhalb der Zielanwendung (z. B. vom Aktivitätsmonitor) einen Quitoder Befehl eingibt?Force Quit

Antwort1

In der Regel ist der Vorgang „Beenden“nichtein Signal; es ist einApple-Event, derselbe Typ der Interprozesskommunikation, der für AppleScript-Skripte und zum Öffnen von Dateien oder URLs in bereits laufenden Anwendungen verwendet wird und der eher aus der Mac OS-Linie als aus Unix stammt.

Ein Prozess muss sich speziell registrieren, um Apple Events zu empfangen, und solche Prozesse sind entweder GUI-Prozesse oder zumindest mit einer Desktop-Sitzung verknüpft (was, abgesehen vom Aktivitätsmonitor, die einzige Möglichkeit ist, ihnen überhaupt die Beendigung aufzuerlegen).

Wenn Sie jedoch einen Prozess über den Aktivitätsmonitor „beenden“ und dieser Prozessnichtfür den Empfang von Apple Events registriert ist, wird stattdessen SIGTERM (15) gesendet.

Antwort2

Mit dtrace können Sie sehen, welche Signale an Prozesse gesendet werden:

sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d", execname, args[2], args[1]->pr_pid); }'

Wenn Sie eine Anwendung, die im Dock angezeigt wird, zwangsweise beenden, ist das Signal normalerweise -15 (TERM). Wenn Sie jedoch einen Hintergrundprozess über den Aktivitätsmonitor zwangsweise beenden, ist es normalerweise -9 (KILL).

Antwort3

Sie können Force-Quit-Ereignisse für GUI-Anwendungen anzeigen, die an gesendet wurden system.log. Oder verwenden Sie dtrace, wie in diesem Thread beschrieben. Mit dtrace erhalten Sie mehr Detailgenauigkeit, benötigen aber Root-Rechte.

verwandte Informationen