GNU/Linux >> Tutoriales Linux >  >> Linux

Linux – Proceso de inicio:¿ancestro de todos los procesos?

Siempre he aprendido que el proceso init es el ancestro de todos los procesos. ¿Por qué el proceso 2 tiene un PPID de 0?

$ ps -ef | head -n 3
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May14 ?        00:00:01 /sbin/init
root         2     0  0 May14 ?        00:00:00 [kthreadd]

Respuesta aceptada:

Primero, "antepasado" no es lo mismo que "padre". El ancestro puede ser el padre del padre... el padre del padre, y el núcleo solo realiza un seguimiento de un nivel.
Sin embargo, cuando un proceso muere, sus hijos son adoptados por init, por lo que verá muchos procesos cuyo padre es 1 en un sistema típico.

Los sistemas Linux modernos también tienen algunos procesos que ejecutan el código del kernel, pero se administran como procesos de usuario, en lo que respecta a la programación. (No obedecen las reglas habituales de administración de memoria ya que ejecutan el código del kernel). Todos estos procesos son generados por kthreadd (es el inicio de los hilos del núcleo). Puede reconocerlos por su ID de proceso principal (2) o, normalmente, por el hecho de que ps los enumera con un nombre entre corchetes o por el hecho de que /proc/2/exe (normalmente un enlace simbólico al ejecutable del proceso) no se puede leer.

Procesos 1 (init ) y 2 (kthreadd ) son creados directamente por el kernel en el momento del arranque, por lo que no tienen un padre. El valor 0 se usa en su campo ppid para indicar eso. Piense en 0 como si significara "el kernel mismo".

Linux también tiene algunas facilidades para que el kernel inicie procesos de usuario cuya ubicación se indica a través de un parámetro sysctl en ciertas circunstancias. Por ejemplo, el kernel puede desencadenar eventos de carga de módulos (por ejemplo, cuando se descubre nuevo hardware o cuando se usan por primera vez algunos protocolos de red) llamando al programa en el kernel.modprobe valor del sistema. Cuando un programa vuelca el núcleo, el kernel llama al programa indicado por kernel.core_pattern si los hay.


Linux
  1. 30 ejercicios de procesos de Linux para administradores de sistemas

  2. Linux:¿un proceso de "subsegador"?

  3. Gestión de procesos en Ubuntu Linux

  4. ¿Cómo calcular la utilización de la CPU de un proceso y todos sus procesos secundarios en Linux?

  5. ¿Los hilos del kernel de Linux son realmente procesos del kernel?

Cómo enumerar los procesos en ejecución en Linux

Comando Ps en Linux (Lista de Procesos)

Cómo matar procesos Zombie en Linux

Supervisión de procesos en Linux

Comandos para la Gestión de Procesos en Linux

Cómo enviar procesos a segundo plano en Linux