Nisso é o pai de todos os processos do Linux. É o primeiro processo a ser iniciado quando o computador é inicializado e é executado até que o sistema seja desligado. É o ancestral de todos os outros processos.
Sua função principal é criar processos a partir de um script armazenado no arquivo / etc / inittab. Esse arquivo geralmente armazena entradas que fazem com que o Init crie gettys em cada linha em que os usuários podem efetuar login. Ele também controla processos autônomos requeridos por qualquer sistema em particular.
Runlevels
UMA runlevel é uma configuração de software do sistema que permite que apenas um grupo selecionado de processos seja executado. Os processos gerados pelo Init para cada um desses runlevels são definidos no arquivo / etc / inittab. A inicialização pode estar em um dos oito níveis de execução: 0 a 6 e S ou s. O nível de execução é alterado por ter um usuário privilegiado executando o Telinit, que envia sinais apropriados para o Init, informando para qual runlevel mudar.
Runlevels 0, 1 e 6 são reservados. O nível de execução 0 é usado para interromper o sistema, o nível de execução 6 é usado para reinicializar o sistema e o nível de execução 1 é usado para colocar o sistema no modo de usuário único. O runlevel S não deve ser usado diretamente, mas sim pelos scripts que são executados ao entrar no nível de execução 1.
Runlevels 7 a 9 também são válidos, embora não sejam bem documentados, porque variantes "tradicionais" do Unix não os utilizam. Os runlevels S e s são os mesmos. Internamente, eles são aliases para o mesmo runlevel.
Inicializando
Depois que o Init é chamado como a última etapa da seqüência de inicialização do kernel, ele procura pelo arquivo / etc / inittab para ver se existe uma entrada do tipo initdefault . A entrada initdefault determina o nível de execução inicial do sistema. Se não houver tal entrada (ou nenhum / etc / inittab), um nível de execução deve ser inserido no console do sistema.
O nível de execução S ou s leva o sistema para o modo de usuário único e não requer um arquivo / etc / inittab. No modo de usuário único, um shell de root é aberto em / dev / console.
Ao entrar no modo de usuário único, o init lê os estados ioctl do console em /etc/ioctl.save. Se este arquivo não existir, o init inicializa a linha em 9600 baud e com as configurações CLOCAL. Quando o init deixa o modo de usuário único, ele armazena as configurações de ioctl do console nesse arquivo para que ele possa reutilizá-las na próxima sessão de usuário único.
Ao entrar em um modo multiusuário pela primeira vez, o Init executa as entradas boot e bootwait para permitir que os sistemas de arquivos sejam montados antes que os usuários possam efetuar login. Então, todas as entradas correspondentes ao nível de execução são processadas.
Ao iniciar um novo processo, o Init primeiro verifica se o arquivo / etc / initscript existe. Em caso afirmativo, ele usa esse script para iniciar o processo.
Cada vez que um filho termina, Init registra o fato e a razão pela qual ele morreu em / var / run / utmp e / var / log / wtmp, desde que esses arquivos existam.
Mudando os Runlevels
Após gerar todos os processos especificados, o Init espera que um de seus processos descendentes morra, um sinal de falha de energia ou até que seja sinalizado pela Telinit para alterar o nível de execução do sistema. Quando uma dessas três condições ocorre, ele reexamina o arquivo / etc / inittab. Novas entradas podem ser adicionadas a este arquivo a qualquer momento. No entanto, o init ainda espera que uma das três condições acima ocorra. Para fornecer uma resposta instantânea, o comando Telinit Q ou q pode ativar o Init para reexaminar o arquivo / etc / inittab.
Se Init não estiver no modo de usuário único e receber um sinal de powerfail (SIGPWR), ele lerá o arquivo / etc / powerstatus. Em seguida, ele inicia um comando com base no conteúdo desse arquivo:
- FALHOU): A energia está falhando, a UPS está fornecendo energia. Execute as entradas powerwait e powerfail.
- ESTÁ BEM): A energia foi restaurada, execute as entradas powerokwait.
- BAIXO): A energia está falhando e o no-break está com bateria fraca. Execute as entradas powerfailnow.
Se / etc / powerstatus não existir ou contiver algo diferente das letras F, O ou L, Init se comportará como se estivesse lendo a letra F.
O uso de SIGPWR e / etc / powerstatus é desencorajado. Qualquer pessoa que queira interagir com o Init deve usar o canal de controle / dev / initctl.
Quando o Init é solicitado a alterar o nível de execução, ele envia o sinal de aviso SIGTERM para todos os processos que estão indefinidos no novo runlevel. Em seguida, aguarda cinco segundos antes de forçar a finalização desses processos usando o sinal SIGKILL. Observe que Init supõe que todos esses processos e seus descendentes permanecem no mesmo grupo de processos que o Init criou originalmente para eles. Se algum processo mudar sua afiliação de grupo de processo, ele não receberá esses sinais. Tais processos precisam ser finalizados separadamente.
Telinit
Telinit está ligado a / sbin / init. Ele recebe um argumento de um caractere e sinaliza a Init para realizar a ação apropriada. Os argumentos a seguir servem como diretivas para o Telinit:
- 0, 1, 2, 3, 4, 5 ou 6: Informe ao Init para alternar para o nível de execução especificado.
- a, b, c: Informe ao Init para processar apenas as entradas do arquivo / etc / inittab que possuírem runlevel a, b ou c.
- Q ou q: Informe ao Init para reexaminar o arquivo / etc / inittab.
- S ou s: Informe ao Init para alternar para o modo de usuário único.
- Você ou eu: Diz ao init para voltar a executar (preservando o estado). Nenhum reexame do arquivo / etc / inittab acontece. O runlevel deve ser S, s, 1, 2, 3, 4 ou 5; caso contrário, a solicitação será ignorada silenciosamente.
O Telinit também pode informar ao Init quanto deve esperar entre os processos de envio dos sinais SIGTERM e SIGKILL. O padrão é cinco segundos, mas esse valor pode ser alterado com o -t seg opção.
O Telinit pode ser chamado apenas por usuários com privilégios apropriados.
O binário de inicialização verifica se é Init ou Telinit, observando seu ID de processo. O ID do processo do Init real é sempre 1. Com isso, em vez de chamar o Telinit, uma pessoa pode usar o Init como um atalho.




