DOKK / manpages / debian 12 / sysvinit-core / init.8.es
INIT(8) Manual del Administrador del Sistema Linux INIT(8)

init, telinit - control de inicialización de procesos

/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/init [ --version ]
/sbin/telinit [ -t SEGUNDOS ] [ 0123456sSQqabcUu ]
/sbin/telinit [ -e VAR[=VAL] ]

Init es el padre de todos los procesos. Su papel primario es crear procesos a partir de un guión guardado en el fichero /etc/inittab (véase inittab(5)). Este fichero normalmente tiene entradas que harán que se levante gettys en cada línea en que los usuarios puedan conectarse. También controla procesos autónomos requeridos por un sistema particular.

Un nivel de ejecución es una configuración de software del sistema que permite existir solo a un grupo de procesos seleccionado. Los procesos levantados por init para cada uno de estos niveles de ejecución se definen en el fichero /etc/inittab. Init puede estar en uno de los ocho niveles de ejecución: 0–6 y S o s. El cambio de nivel de ejecución se hace mediante un usuario con privilegio que ejecute telinit, que envía las señales apropiadas a init, diciéndole a qué nivel de ejecuación tiene que cambiar.

Runlevels S, 0, 1, and 6 are reserved. Runlevel S is used to initialize the system on boot. When starting runlevel S (on boot) or runlevel 1 (switching from a multi-user runlevel) the system is entering “single-user mode”, after which the current runlevel is S. Runlevel 0 is used to halt the system; runlevel 6 is used to reboot the system.

After booting through S the system automatically enters one of the multi-user runlevels 2 through 5, unless there was some problem that needs to be fixed by the administrator in single-user mode. Normally after entering single-user mode the administrator performs maintenance and then reboots the system.

For more information, see the manpages for shutdown(8) and inittab(5).

Los niveles 7-9 también son válidos, aunque realmente no están documantados. Esto es porque las variantes Unix tradicionales no los usan.

Runlevels S and s are the same. Internally they are aliases for the same runlevel.

Tras llamar a init como el último paso de la secuencia de carga del núcleo, busca el fichero /etc/inittab para ver si hay una entrada del tipo initdefault (véase inittab(5)). La entrada initdefault determina el nivel de ejecución inicial del sistema. Si no está esa entrada (o no existe /etc/inittab), se debe introducir un nivel de ejecución en la consola del sistema.

Runlevel S or s initialize the system and do not require an /etc/inittab file.

In single user mode, /sbin/sulogin is invoked on /dev/console.

When entering single user mode, init initializes the consoles stty settings to sane values. Clocal mode is set. Hardware speed and handshaking are not changed.

Cuando se entra por primera vez en un modo multiusuario, init realiza las entradas boot y bootwait para permitir que se monten los sistemas de ficheros antes de que los usuarios se presenten al sistema. Entonces se procesan todas las entradas para este nivel.

Cuando inicia un nuevo proceso, init primero verifica si existe el fichero /etc/initscript. Si existe, usa este script para iniciar el proceso.

Cada vez que un hijo termina, init registra el hecho y la razón de su muerte en /var/run/utmp y /var/log/wtmp, suponiendo que estos ficheros existen.

Tras haber lanzado todos los procesos especificados, init espera a que alguno de sus procesos descendientes muera, una señal de fallo de alimentación o hsata que se le indique por telinit que cambie el nivel de ejecución del sisema. Cuando alguna de las tres condiciones anteriores ocurre, re-examina el fichero /etc/inittab. Se pueden añadir nuevas entradas a este fichero en cualquier momento. Sin embargo, init aun espera a que alguna de las tres condiciones anteriores suceda. Para proporcionar un respuesta inmediata, telinit Q o el mandato q puede levantar init para que re-examine el fichero /etc/inittab.

If init is not in single user mode and receives a powerfail signal (SIGPWR), it reads the file /etc/powerstatus. It then starts a command based on the contents of this file:

Power is failing, UPS is providing the power. Execute the powerwait and powerfail entries.
The power has been restored, execute the powerokwait entries.
The power is failing and the UPS has a low battery. Execute the powerfailnow entries.

If /etc/powerstatus doesn't exist or contains anything else then the letters F, O or L, init will behave as if it has read the letter F.

Usage of SIGPWR and /etc/powerstatus is discouraged. Someone wanting to interact with init should use the /run/initctl control channel - see the initctl(5) manual page for more documentation about this.

Cuando se lesolicita a init que cambie el nivel, envía la señal de aviso SIGTERM a todos los procesos que no están definidos en el nuevo nivel de ejecución. Espera 3 segundos antes de forzar la terminación de estos procesos mediante la señal SIGKILL. Observe que init supone que todos estos procesos (y sus descendientes) permanecen en el mismo grupo de procesos que init creó originalmente para ellos. Si cualquier proceso cambia la afiliación de grupo de proceso no recibirá estas señales. Tales procesos necesitan ser terminados de forma separada.

/sbin/telinit está enlazado con /sbin/init. Toma un argumento de un solo carácter y señala a init para realizar la acción apropiada. Los siguientes argumetos sirven como directivas para telinit:

0, 1, 2, 3, 4, 5 or 6
indica a init que cambie al nivel de ejecución especificado.
tell init to process only those /etc/inittab file entries having runlevel a, b or c.
indica a init que re-examine el fichero /etc/inittab.
indica a init que cambie a modo monousuario.
indica a init que reejecute él mismo (guardando el estado). No re-examining el fichero /etc/inittab. El nivel de ejecución debería ser uno de Ss0123456, en otro caso la solicitud sería ignorada silenciosamente.

telinit ptambién puede decir a init cuanto esperará entre los envíos a los procesos de las señales SIGTERM y SIGKILL. El valor por defecto es is 3 segundos, pero se puede cambiar con la opción -t.

telinit -e tells init to change the environment for processes it spawns. The argument of -e is either of the form VAR=VAL which sets variable VAR to value VAL, or of the form VAR (without an equality sign) which unsets variable VAR.

telinit solo se puede llamar por usuarios con los privilegios apropiados.

El binario init comprueba si es init o telinit mirando a su id de proceso; el id del proceso init real es siempre 1. De esto podemos concluir que en lugar de llamar a telinit se puede usar init en su lugar como abreviatura.

Init fija las siguientes variables de entorno para todos sus hijos:

/bin:/usr/bin:/sbin:/usr/sbin
Como el nombre dice. Útil para determinar si un guión corre directamente de init.
El nivel actual de ejecución del sistema.
El nivel de ejecución previo (útil tras un cambio de nivel).
La consola del sistema. Esto realmente es heredado del núcleo; sin embargo si no está fijado init lo pondrá como /dev/console por defecto.

Es posible pasar un número de banderas a init desde el monitor de arranque (v.g. LILO o GRUB). init acepta las siguientes banderas:

Arranque en modo monousuario. En este modo /etc/inittab se examina y los guiones de carga rc normalmente se ejecutan antes de que la shell del modo monousuario se inicie.
1-5
Nivel de ejecución en el que arrancar.
Carga directamente en una shell monousuario sin ejecutar cualquier otro guion de inicio.
The LILO boot loader adds the word "auto" to the command line if it booted the kernel with the default command line (without user intervention). If this is found init sets the "AUTOBOOT" environment variable to "yes". Note that you cannot use this for any security measures - of course the user could specify "auto" or -a on the command line manually.
The argument to -z is ignored. You can use this to expand the command line a bit, so that it takes some more space on the stack. init can then manipulate the command line so that ps(1) shows the current runlevel.
This argument, when used on its own, displays the current version of init to the console/stdout. It is a quick way to determine which init software and version is being used. After the version information is displayed, init immediately exits with a return code of zero.

init escucha en un fifo en /dev, /run/initctl, los mensajes. Telinit usa esto para comunicar con init. La interfaz no está muy bien documentada o acabada. Quienes estén interesados debería estudiar el fichero initreq.h del subdirectorio src/ del código fuente de init.

Init reacciona ante diversas señales:

Has the same effect as telinit q.
Al recibir esta señal, init cierra y reabre su fifo de de control /run/initctl. Ess útil para los guiones de arranque cuando se vuelve a montar /dev.
When init receives SIGUSR2, init closes and leaves the control fifo, /run/initctl, closed. This may be used to make sure init is not holding open any files. However, it also prevents init from switching runlevels. Which means commands like shutdown no longer work. The fifo can be re-opened by sending init the SIGUSR1 signal.
Normalmente el núcleo envía esta señal a init cuando se pulsa CTRL-ALT-SUPR. Esto activa la acción ctrlaltdel.
El núcleo envía esta señal cuado se pulsa la tecla KeyboardSignal. Activa la acción kbrequest.

init es compatible con el init System V init. Funciona junto a los guiones de lso directorios /etc/init.d y /etc/rc{runlevel}.d. Si su sistema usa esta convención, debería haber un fichero README en el directorio /etc/init.d que explica como funcionan estos guiones.

/etc/inittab
/etc/initscript
/dev/console
/var/run/utmp
/var/log/wtmp
/run/initctl

init supone que procesos y descendientes de procesos permanecen en el mismo grupo de procesos que se creó originalmente para ellos. Si los procesos cambian su grupo init no puede matarlos y v.d. puede acabar con dos procesos leyendo de una línea del terminal.

On a Debian system, entering runlevel 1 causes all processes to be killed except for kernel threads and the script that does the killing and other processes in its session. As a consequence of this, it isn't safe to return from runlevel 1 to a multi-user runlevel: daemons that were started in runlevel S and are needed for normal operation are no longer running. The system should be rebooted.

Si init encuantra que está levantando continuamente una entrada, más de 10 veces en dos minutos, supondrá que es un error en la cedena del mandato, genera un mensaje de error en la consola del sistema y rehusa levantar esta entrada hasta que hayan pasado 5 minutos o recibas una señal. Esto no previene de que se coma los recursos del sistema cuando alguien comete un error tipográfico en el fichero /etc/inittab o en el programa para el que se elimina la entrada.

Miquel van Smoorenburg , página de manual inicial por Michael Haardt.

getty(1), login(1), sh(1), runlevel(8), shutdown(8), kill(1), initctl(5), inittab(5), initscript(5), utmp(5)

29 de julio de 2004 sysvinit