En eso es el padre de todos los procesos de Linux. Es el primer proceso que se inicia cuando se inicia una computadora y se ejecuta hasta que el sistema se apaga. Es el antepasado de todos los demás procesos.
Su función principal es crear procesos a partir de un script almacenado en el archivo / etc / inittab. Generalmente, este archivo almacena las entradas que hacen que Init genere referencias en cada línea en la que los usuarios pueden iniciar sesión. También controla los procesos autónomos requeridos por cualquier sistema en particular.
Niveles de ejecución
UNA nivel de ejecución es una configuración de software del sistema que permite que solo se ejecute un grupo seleccionado de procesos. Los procesos generados por Init para cada uno de estos niveles de ejecución se definen en el archivo / etc / inittab. Init puede estar en uno de ocho niveles de ejecución: 0 a 6 y S o s. El nivel de ejecución se modifica al hacer que un usuario privilegiado ejecute Telinit, que envía las señales apropiadas a Init, indicándole a qué nivel de ejecución cambiar.
Los niveles de ejecución 0, 1 y 6 están reservados. El nivel de ejecución 0 se usa para detener el sistema, el nivel de ejecución 6 se usa para reiniciar el sistema, y el nivel de ejecución 1 se usa para poner el sistema en modo de usuario único. El nivel de ejecución S no está destinado a ser utilizado directamente, sino por los scripts que se ejecutan al ingresar el nivel de ejecución 1.
Los niveles de ejecución del 7 al 9 también son válidos, aunque no están bien documentados porque las variantes "tradicionales" de Unix no los usan. Los niveles de ejecución S y s son los mismos. Internamente, son alias para el mismo nivel de ejecución.
Arrancando
Después de que Init se invoque como el último paso de la secuencia de arranque del kernel, busca el archivo / etc / inittab para ver si hay una entrada del tipo initdefault . La entrada initdefault determina el nivel de ejecución inicial del sistema. Si no hay tal entrada (o no hay / etc / inittab), se debe ingresar un nivel de ejecución en la consola del sistema.
El nivel de ejecución S o s lleva el sistema al modo de usuario único y no requiere un archivo / etc / inittab. En el modo de usuario único, se abre un shell raíz en / dev / console.
Al entrar en el modo de usuario único, init lee los estados ioctl de la consola desde /etc/ioctl.save. Si este archivo no existe, init inicializa la línea a 9600 baudios y con la configuración CLOCAL. Cuando init deja el modo de usuario único, almacena la configuración ioctl de la consola en este archivo para que pueda reutilizarlos para la próxima sesión de usuario único.
Cuando se ingresa en un modo multiusuario por primera vez, Init realiza las entradas de inicio y espera para permitir que los sistemas de archivos se monten antes de que los usuarios puedan iniciar sesión. Luego, se procesan todas las entradas que coinciden con el nivel de ejecución.
Al iniciar un nuevo proceso, Init primero verifica si existe el archivo / etc / initscript. Si lo hace, utiliza este script para iniciar el proceso.
Cada vez que un hijo termina, Init registra el hecho y la razón por la que murió en / var / run / utmp y / var / log / wtmp, siempre que estos archivos existan.
Cambio de niveles de ejecución
Después de que genera todos los procesos especificados, Init espera que uno de sus procesos descendientes muera, una señal de fallo de poder, o hasta que Telinit le indique que cambie el nivel de ejecución del sistema. Cuando se produce una de estas tres condiciones, vuelve a examinar el archivo / etc / inittab. Se pueden agregar nuevas entradas a este archivo en cualquier momento. Sin embargo, init todavía espera que ocurra una de las tres condiciones anteriores. Para proporcionar una respuesta instantánea, el comando Telinit Q o q puede activar Init para volver a examinar el archivo / etc / inittab.
Si Init no está en modo de usuario único y recibe una señal de fallo de energía (SIGPWR), lee el archivo / etc / powerstatus. A continuación, inicia un comando basado en el contenido de este archivo:
- FALLAR): La energía está fallando, UPS está proporcionando la energía. Ejecute las entradas powerwait y powerfail.
- DE ACUERDO): La energía ha sido restaurada, ejecute las entradas de powerokwait.
- BAJO): La alimentación está fallando y el UPS tiene poca batería. Ejecutar las entradas de powerfailnow.
Si / etc / powerstatus no existe o contiene algo más que las letras F, O o L, Init se comporta como si leyera la letra F.
Se desaconseja el uso de SIGPWR y / etc / powerstatus. Cualquiera que quiera interactuar con Init debe usar el canal de control / dev / initctl.
Cuando se solicita a Init que cambie el nivel de ejecución, envía la señal de advertencia SIGTERM a todos los procesos que están indefinidos en el nuevo nivel de ejecución. Luego espera cinco segundos antes de terminar por la fuerza estos procesos utilizando la señal SIGKILL. Tenga en cuenta que Init asume que todos estos procesos y sus descendientes permanecen en el mismo grupo de procesos que Init creó originalmente para ellos. Si algún proceso cambia su afiliación al grupo de procesos, no recibe estas señales. Tales procesos deben terminarse por separado.
Telinit
Telinit está vinculado a / sbin / init. Toma un argumento de un carácter y señala a Init para realizar la acción apropiada. Los siguientes argumentos sirven como directivas para Telinit:
- 0, 1, 2, 3, 4, 5 o 6: Dígale a Init que cambie al nivel de ejecución especificado.
- a B C: Indique a Init que procese solo las entradas del archivo / etc / inittab que tengan nivel de ejecución a, b o c.
- Q o q: Dígale a Init que vuelva a examinar el archivo / etc / inittab.
- S o s: Dile a Init que cambie al modo de usuario único.
- U o u: Dile a init que se vuelva a ejecutar (preservando el estado). No se vuelve a examinar el archivo / etc / inittab. El nivel de ejecución debe ser S, s, 1, 2, 3, 4 o 5; de lo contrario, la solicitud se ignora silenciosamente.
Telinit también puede decirle a Init cuánto tiempo debe esperar entre los procesos de envío de las señales SIGTERM y SIGKILL. El valor predeterminado es cinco segundos, pero este valor se puede cambiar con el -t seg opción.
Telinit solo puede ser invocado por usuarios con los privilegios adecuados.
El binario Init comprueba si es Init o Telinit mirando su ID de proceso. El ID de proceso real de Init es siempre 1. A partir de esto, se deduce que, en lugar de llamar a Telinit, una persona puede usar Init como acceso directo.




