Cómo funciona la jerarquía de procesos en macOS

Me pregunto cómo Activity Monitorse relacionan estos dos procesos si el niño (Safari Web Content) no tiene el ppiddel principal (Safari). pstree, que usa the ppidpara organizar el árbol, no muestra ninguna relación entre ellos.

Árbol de procesos de Safari

Aquí hay otro ejemplo, caffeinatese inició desde un script de shell dentro BetterTouchToolusando nohup, y nuevamente pstreeno muestra ninguna relación.

árbol de proceso de cafeína

En realidad, lo que necesito es enviar una killseñal a los "niños" como Safari Web Contentusar shell scripto Capi sabiendo solo el "Safari" pid. Y creo que esto podría ayudar.

Respuestas (1)

Los procesos "secundarios" de Safari son en realidad hijos del sistema init ( launchdque tiene PID 1), lo que explica por qué pstreeu otras herramientas de Unix no pueden hacer uso de la relación pid (o grupo de procesos) principal habitual:

listado de procesos del monitor de actividad

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

En su lugar, deberá utilizar una API de Apple; la launchctlutilidad indica que el "dominio" o "ASID" puede ser relevante:

% 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

Pero publiquemos esta información antes de probar qué launchctl kill ...hace algo parecido.

(También tenga en cuenta que lo anterior es de Mac OS X 10.11.6, es posible que Apple haya cambiado las interfaces desde entonces).

La API es responsibility_get_pid_responsible_for_pidde libquarantine.