Como usar o comando Init en Linux

Init é o pai de todos os procesos. O seu papel principal é crear procesos a partir dun script almacenado no ficheiro / etc / inittab (ver inittab (5)). Este ficheiro xeralmente ten entradas que provocan init para xerar getty s en cada liña que os usuarios poidan iniciar sesión. Tamén controla os procesos autónomos que require un sistema en particular.

Runlevels

Un nivel de execución é unha configuración de software do sistema que permite que só un grupo seleccionado de procesos sexan existentes. Os procesos xerados por init para cada un destes niveis de execución están definidos no ficheiro / etc / inittab . Init pode estar nun dos oito niveis de execución: 0-6 e S ou s . O nivel de execución modifícase tendo un servizo privilexiado telinit executado, que envía os sinais apropiados para iniciar , dicíndolle cal modifica o nivel de execución.

Os niveis de execución 0 , 1 e 6 están reservados. O nivel de execución 0 úsase para deter o sistema, o nivel de execución 6 utilízase para reiniciar o sistema e o nivel de execución 1 emprégase para que o sistema caia nun modo de usuario único. O Runlevel S realmente non se destina a ser usado directamente, senón máis para os scripts que se executan ao entrar no nivel de execución 1. Para obter máis información sobre isto, consulte as manpages para apagar (8) e inittab (5).

Os niveis de execución 7-9 tamén son válidos, aínda que non están realmente documentados. Isto débese a que as variantes "tradicionais" de Unix non as utilizan. No caso de que estea curioso, os niveis de execución S e s son de feito o mesmo. Internamente son alias para o mesmo nivel de execución.

Arranque

Despois de invitar a init como o último paso da secuencia de inicio do kernel, busca o ficheiro / etc / inittab para ver se hai unha entrada do tipo initdefault (ver inittab (5)). A entrada initdefault determina o nivel de execución inicial do sistema. Se non existe tal entrada (ou non / etc / inittab en todo), un nivel de execución debe ser inserido na consola do sistema.

O nivel de executar S ou s trae o sistema a modo de usuario único e non require un ficheiro / etc / inittab . No modo de usuario único, un shell de raíz ábrese en / dev / console .

Ao entrar no modo de usuario único, init le os estados ioctl (2) da consola desde /etc/ioctl.save . Se este ficheiro non existe, init inicializa a liña en 9600 baudios e con configuración CLOCAL . Cando init sae do modo de usuario único, almacena as opcións de ioctl da consola neste ficheiro para que poida volver a usalas para a seguinte sesión de usuario único.

Ao entrar nun modo multiusuario por primeira vez, init realiza as entradas de inicio e de arranque para permitir que os sistemas de ficheiros se monten antes de que os usuarios poidan iniciar sesión. Entón todas as entradas que coinciden co nivel de execución son procesadas.

Ao iniciar un novo proceso, init verifica primeiro se existe o ficheiro / etc / initscript . Se o fai, emprega este script para iniciar o proceso.

Cada vez que finaliza un neno, init rexistra o feito e a razón pola que morreu en / var / run / utmp e / var / log / wtmp , sempre que estes ficheiros existan.

Cambiar os niveis de execución

Despois de xerar todos os procesos especificados, init espera que morra un dos seus procesos descendentes, un sinal de potencia, ou ata que sexa sinalizado por telinit para cambiar o nivel de execución do sistema. Cando se produce unha das tres condicións anteriores, reexame o ficheiro / etc / inittab . Pódense engadir novas entradas a este ficheiro en calquera momento. Non obstante, init aínda espera que ocorra unha das tres condicións anteriores. Para proporcionar unha resposta instantánea, o comando Q ou Q pode reiniciar para reexaminar o ficheiro / etc / inittab .

Se init non está no modo de usuario único e recibe un sinal de fonte de alimentación (SIGPWR), le o ficheiro / etc / powerstatus . Inicia entón un comando baseado nos contidos deste ficheiro:

F (AIL)

A enerxía está fallando, UPS está a proporcionar o poder. Executar as entradas de potencia e de potencia .

OK)

A potencia foi restaurada e executa as entradas de powerokwait .

L (OW)

A enerxía está fallando e a UPS ten unha batería baixa. Executa as entradas powerfailnow .

Se / etc / powerstatus non existe ou contén outra cousa, entón as letras F , O ou L , init comportaranse coma se lese a letra F.

Non se desactiva o uso de SIGPWR e / etc / powerstatus . Alguén que queira interactuar con init debería usar a canle de control / dev / initctl - ver o código fonte do paquete sysvinit para obter máis documentación sobre isto.

Cando se solicita a init para cambiar o nivel de execución, envía o sinal de aviso SIGTERM a todos os procesos que non están definidos no novo nivel de execución. A continuación, agarda 5 segundos antes de terminar a forza destes procesos a través do sinal SIGKILL . Teña en conta que init supón que todos estes procesos (e os seus descendentes) permanecen no mesmo grupo de procesos que inicialmente crearon para eles. Se algún proceso cambia a súa afiliación ao grupo de procesos, non recibirá estes sinais. Estes procesos deben ser rescindidos por separado.

Telinit

/ sbin / telinit está ligado a / sbin / init . Leva un argumento de un carácter e inicia os sinais para realizar a acción adecuada. Os seguintes argumentos serven como directivas para telinitar :

0 , 1 , 2 , 3 , 4 , 5 ou 6

indique init para cambiar ao nivel de execución especificado.

a , b , c

di init para procesar só as entradas de ficheiro / etc / inittab que teñen o nivel de execución a , b ou c .

Q ou q

diga init para volver a examinar o ficheiro / etc / inittab .

S ou s

indique init para cambiar ao modo de usuario único.

U ou u

indique init para que se execute de novo (preservando o estado). Non se fai un reexame do ficheiro / etc / inittab . O nivel de execución debería ser un dos Ss12345 , se non, a solicitude sería ignorada en silencio.

telinit tamén pode indicar o tempo que debe esperar entre os sinais SIGTERM e SIGKILL entre os procesos de envío. O valor predeterminado é de 5 segundos, pero isto pódese cambiar coa opción -t sec .

Telinit só pode ser invocado por usuarios con privilexios axeitados.

Os controis binarios init se está init ou telinit mirando a súa id de proceso ; a ID do proceso de inicio real é sempre 1 . A partir disto segue que no canto de chamar a telinit tamén se pode usar init no canto de atallo.