2 votos

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

Me pregunto cómo Activity Monitor relaciona estos dos procesos si el hijo (Safari Web Content) no tiene el ppid de la principal (Safari). pstree que utiliza el ppid para organizar el árbol, no muestra ninguna relación entre ellos.

Safari process tree

He aquí otro ejemplo, caffeinate fue lanzado desde un shell script dentro de BetterTouchTool utilizando nohup , y de nuevo pstree no muestra ninguna relación.

caffeinate process tree

En realidad lo que necesito es enviar un kill señal a los "niños" como Safari Web Content utilizando shell script o C api conociendo sólo el "Safari" pid . Y creo que esto puede ayudar.

5voto

thrig Puntos 101

Los procesos "hijos" de Safari son en realidad hijos del sistema init ( launchd que tiene PID 1 ) que explica por qué pstree u otras herramientas unix de este tipo no pueden hacer uso de la habitual relación pid (o grupo de procesos) padre:

activity monitor process listing

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

En su lugar, tendrá que utilizar una API de Apple; el launchctl 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 vamos a publicar esta información antes de probar lo que algo como launchctl kill ... lo hace.

(También hay que tener en cuenta que lo anterior es de Mac OS X 10.11.6, las interfaces pueden haber sido cambiadas por Apple desde entonces).

3 votos

La API es responsibility_get_pid_responsible_for_pid de libquarantine.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X