Pregunta Indica si un proceso está bajo systemd, init.d o Upstart control


¿Es posible contar confiablemente para un determinado proceso de Linux si fue lanzado o aún está supervisado por un script init.d, Upstart o systemd?


1


origen


Debería poder decir desde su jerarquía principal. La forma más fácil es usar un monitor del sistema en la vista de árbol. En Ubuntu 15.04 encuentro ksysguard el más fácil de usar, aunque también puedes usar gnome-system-monitor. Si su Linux no tiene estos programas disponibles, puede usar ps -eHl|less y sigue el árbol del programa que te interesa. - AFH
No lo creo. Mirando a pstree en mi sistema, la mayoría de los procesos parecen haberse separado de su padre. Solo hay unos pocos procesos iniciados por mi sesión de escritorio, por lo que la mayoría de los procesos en el nivel superior deben haber sido iniciados por algún init deamon, supongo. - dronus
Mi pstree muestra todo lo que se deriva de systemd (PID 1), incluidos upstart, que está muy abajo en la lista. Obtengo lo mismo de ps -eHl. - AFH
Porque systemd tiene PID 1 (el más alto), que es el único proceso permitido de nivel superior. Este comportamiento de systemd a menudo es criticado. Por lo tanto, cualquier proceso que se libere de sus padres está emparentado por systemd. Si utiliza scripts Upstart o init.d en un sistema sin sistemad, verá que la mayoría de los procesos están justo por debajo de init, a pesar de que la mayoría de ellos fueron iniciados por los scripts Upstart o init.d. En su sistema deportivo del sistema, verá cualquier proceso lanzado por su padre a continuación systemd, por lo que no puede decir quién inició el proceso en primer lugar de esa manera. - dronus
Lo siento, no sabía sobre este comportamiento. Como la mayoría de los procesos en 15.04 tienen systemd como progenitor, esto parece estar de acuerdo con lo que había leído, que systemd mayormente reemplazado upstart en 15.04. Por cierto, como un aparte, parece que tengo dos procesos de alto nivel: porque ejecuto algunos procesos de KDE, también hay kthreadd (PID 2), también sin padres, pero con muchos hijos. - AFH


Respuestas:


Con systemd, puede encontrar a qué servicio de sistema pertenece un proceso mirando el cgroup en el que se encuentra.

Por ejemplo:

$ ps -eo pid,comm,cgroup | grep dhclient
6476 dhclient 8:devices:/system.slice NetworkManager.service,1:name=systemd:/system.slice/NetworkManager.service

te dirá que el dhclient proceso es parte de la NetworkManager.service, y así es administrado por systemd.

Mientras:

$ ps -eo pid,comm,cgroup | grep firefox
3302 firefox 8:devices:/user.slice,1:name=systemd:/user.slice/user-1000.slice/session-c2.scope

muestra que este proceso de Firefox es parte de la sesión iniciada por el usuario con el UID 1000.

Los procesos iniciados por initscripts o trabajos Upstart no se pueden distinguir de otros procesos en segundo plano lanzados manualmente.


1