Funktionsweise der Prozesshierarchie in macOS

Ich frage mich, wie Activity Monitordiese beiden Prozesse zusammenhängen, wenn das Kind (Safari-Webinhalt) nicht das ppiddes Hauptprozesses (Safari) hat. pstree, das verwendet, ppidum den Baum zu organisieren, zeigt keine Beziehung zwischen ihnen.

Safari-Prozessbaum

Hier ist ein weiteres Beispiel, das von einem Shell-Skript innerhalb mit caffeinategestartet wurde und wieder keine Beziehung zeigt.BetterTouchToolnohuppstree

Koffein-Prozessbaum

killWas ich eigentlich brauche, ist ein Signal an "Childs" zu senden, wie Safari Web Contentdie Verwendung von shell scriptoder Capi, die nur die "Safari" kennen pid. Und ich denke, das könnte helfen.

Antworten (1)

Die "untergeordneten" Prozesse von Safari sind eigentlich Kinder des Init-Systems ( launchddas PID hat 1), was erklärt, warum pstreeoder andere solche Unix-Tools die übliche Eltern-PID- (oder Prozessgruppen-) Beziehung nicht verwenden können:

Aktivitätsmonitor-Prozessliste

% ps axo pid,ppid | egrep '81921|81925|82022'
81921     1
81925     1
82022     1

Stattdessen müssen Sie eine Apple-API verwenden; Das launchctlDienstprogramm gibt an, dass die "Domäne" oder "ASID" relevant sein kann:

% sudo launchctl procinfo 82022 | grep -1 81921

        domain = com.apple.xpc.launchd.domain.pid.Safari.81921
        asid = 100006
--
--

responsible pid = 81921
responsible unique pid = 81921
responsible path = /Applications/Safari.app/Contents/MacOS/Safari

Aber lassen Sie uns diese Informationen posten, bevor wir testen, was so etwas launchctl kill ...tut.

(Beachten Sie auch, dass das Obige von Mac OS X 10.11.6 stammt, die Schnittstellen wurden seitdem möglicherweise von Apple geändert.)

Die API stammt responsibility_get_pid_responsible_for_pidvon libquarantine.