\section{init}
\index{init}
\subsubsection{NOME }
init, telinit - processo de controle da inicialização do sistema 
 \subsubsection{SINOPSE }
\textbf{/sbin/init} [\textbf{ 0123456Ss }]  

\textbf{/sbin/telinit} [\textbf{ -t seg }] [\textbf{ 0123456sSQqabcUu }]  
%\subsubsection{DESCRIÇÃO }
\textbf{Init} é o pai de todos os processos. O seu papel principal 
é criar os processos a partir de programas armazenados no arquivo \textbf{/etc/inittab 
} (veja \textit{\textsf{inittab }(5)}). Este arquivo tem entradas que fazem com que o \textbf{init 
} inicie \textbf{getty }s em cada linha que os usuários podem usar para acessar 
o sistema. Ele controla ainda processos autônomos requeridos por qualquer 
sistema em particular. 

 \subsubsection{NÍVEIS DE EXECUÇÃO }
Um \textit{nível de execução } é uma 
configuração de software do sistema que permite que um grupo selecionado 
de processos sejam inicializados. Os processos acionados por \textbf{init } para 
cada um dos níveis de execução são definidos no arquivo \textbf{/etc/inittab }. 
 \textbf{Init } pode estar em um dos oito níveis de execução: \textbf{0en6 } e \textbf{S } ou \textbf{s }. 
 O nível de execução é alterado tendo-se os privilégios de execução do 
programa \textbf{telinit}, o qual envia os sinais apropriados para o \textbf{init }, indicando 
qual nível de execução o sistema deve ser mudado. 

Níveis de execução \textbf{0}, \textbf{1}, e \textbf{6} são reservados. Nível 0 é usado para finalizar o sistema, nível 
6 é usado para reinicializar o sistema, e nível 1 é usado para inicializar 
o sistema em modo monousuário. Nível \textbf{S } não é usado diretamente, mas sim 
para programas que são executados durante o início do nível 1. Para maiores 
informações, veja as páginas de manual \textbf{\textsf{shutdown }(8)} e \textbf{\textsf{inittab }(5)}. 

Níveis 
7-9 também são válidos, apesar de não estarem documentados. Isso é devido 
ao fato de que o Unix tradicional não os utiliza. Caso esteja curioso, 
níveis de execução \textit{S } e \textit{s } são na verdade iguais. Internamente eles são 
nomes alternativos para o mesmo nível - isso somente foi deixado pelo autor. 


 \subsubsection{INICIANDO }
Após o \textbf{init } ser iniciado como o último passo da seqüência 
de inicialização, ele procura pelo arquivo \textbf{/etc/inittab } e verifica se 
há alguma entrada para o tipo \textbf{initdefault } (veja \textit{\textsf{inittab }(5)}). A entrada 
\textbf{initdefault } define o nível de execução inicial do sistema. Caso não haja 
tal entrada (ou o \textbf{/etc/inittab } não seja encontrado), um nível de execução 
deve ser informado na console do sistema. 

Nível de execução \textbf{S } ou \textbf{s } colocam 
o sistema em modo monousuário e não requerem o arquivo \textbf{/etc/initttab }. 
No modo monousuário, \textbf{/sbin/sulogin } é acionado em  \textbf{/dev/console }. Neste 
modo, \textbf{init } lê o estado da console através do \textit{\textsf{ioctl }(2)} a partir do \textbf{/etc/ioctl.save 
}.  Caso o arquivo não exista, o \textbf{init } inicializa a linha com a velocidade 
de \textbf{9600 baud } e com as configurações \textbf{CLOCAL }. Ao sair do modo monousuário, 
\textbf{init } guarda as configurações de console de  \textit{ioctl } neste arquivo, que 
assim podem ser utilizados na próxima sessão em modo monousuário. 

Ao entrar 
em modo multiusuário pela primeira vez, o programa \textbf{init } executa as entradas 
\textbf{boot } e \textbf{bootwait } para permitir que os sistemas de arquivos sejam montados 
antes dos usuários acessarem o sistema. Todas as entradas que coincidam 
com o nível de execução que está sendo iniciado serão executadas. 

Ao iniciar 
um novo processo, \textbf{init } primeiro verifica se o arquivo \textit{/etc/initscript 
} existe. Caso afirmativo ele usa este programa para iniciar o processo. 


Cada vez que um filho termina, \textbf{init } registra o fato e a razão de sua 
morte em \textbf{/var/run/utmp } e \textbf{/var/log/wtmp }, caso estes arquivos existam. 


  \subsubsection{MUDANDO NÍVEIS DE EXECUÇÃO }
Após iniciar todos os processos especificados, 
o \textbf{init } fica aguardando a morte dos processos descendentes, um sinal de 
falha de energia ou até que \textbf{telinit } indique que deve ser mudado o nível 
de execução do sistema. Quando uma das três condições ocorre, o arquivo 
\textbf{/etc/inittab } é reexaminado. Novas entradas podem ser adicionadas a esse 
arquivo a qualquer tempo. De qualquer forma, \textbf{init } esperará uma das três 
condições acima para reler o arquivo. Para utilizar imediatamente um arquivo 
alterado, utiliza-se o comando \textbf{telinit Q } ou \textbf{q } para acordar o \textbf{init } que 
reexaminará o arquivo  \textbf{/etc/inittab }. 

Caso o \textbf{init } não esteja em modo monousuário 
e receba um sinal de falha de energia, algumas entradas relacionadas a 
esta situação são acionadas. 

Quando \textbf{init } é requisitado para mudar de nível 
de execução, ele envia o sinal \textbf{SIGTERM } para todos os processos que estão 
em um nível de execução indefinido. Então aguarda 5 segundos e após força 
a conclusão dos processos via o sinal \textbf{SIGKILL}. Note que \textbf{init } assume que 
todos esses processos (e seus descendentes) permanecem no mesmo grupo 
de processo no qual \textbf{init } originalmente os criou. Caso qualquer processo 
mude de grupo ele não receberá estes sinais. Tais processos necessitam 
ser terminados separadamente.  \subsubsection{TELINIT }
\textbf{/sbin/telinit } é um link simbólico 
de  \textbf{/sbin/init }. Ele recebe um argumento de um caracter e sinaliza ao \textbf{init 
} para executar a ação apropriada. Os seguintes argumentos servem como diretivas 
para \textbf{telinit }: \begin{dispitems}
\item [\textbf{0 },\textbf{1 },\textbf{2 },\textbf{3 },\textbf{4 },\textbf{5 } ou \textbf{6 } ] dizem ao  \textbf{init } para mudar o nível 
de execução. 
\item [\textbf{a },\textbf{b },\textbf{c } ] dizem ao \textbf{init } para processar somente aquelas entradas 
no arquivo \textbf{/etc/inittab }  que tenham os níveis de execução \textbf{a },\textbf{b } ou \textbf{c 
}. 
\item [\textbf{Q } ou \textbf{q } ] dizem ao \textbf{init } para reexaminar o arquivo \textbf{/etc/inittab }. 
\item [\textbf{S } or 
\textbf{s } ] dizem ao \textbf{init } para entrar em modo monousuário. 
\item [\textbf{U } or \textbf{u } ] dizem ao \textbf{init 
} para reexecutar a si próprio (preservando o estado), e sem reexaminar 
o arquivo \textbf{/etc/inittab } . Nível de execução pode ser um entre \textbf{Ss12345}, 
de outra forma a requisição será silenciosamente ignorada. 
\end{dispitems}


\textbf{telinit } pode 
ainda dizer a \textbf{init } o quanto ele deve esperar entre o envio dos sinais 
SIGTERM e SIGKILL para os processos. O padrão é 5 segundos, mas isso pode 
ser mudado através da opção \textbf{-t seg }. 

\textbf{telinit } somente pode ser acionado 
por usuários com privilégios para tanto. 

O binário \textbf{init } verifica se este 
é o \textbf{init } ou \textbf{telinit }, através da análise da \textit{identificação do processo 
}; o id do processo \textbf{init } é sempre igual a  \textbf{1 }. Pode-se usar \textbf{init } diretamente 
como um atalho ao invés do \textbf{telinit }.  \subsubsection{AMBIENTE }
\textbf{Init } configura as seguintes 
variáveis de ambiente para todos os seus filhos \begin{dispitems}
\item [\textbf{PATH } ] \textit{/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin 
} 
\item [\textbf{INIT\_VERSION } ] Como o nome diz, é útil para determinar se um programa 
deve ser executado diretamente por \textbf{init }. 
\item [\textbf{RUNLEVEL } ] O nível de execução 
atual do sistema. 
\item [\textbf{PREVLEVEL } ] O nível de execução anterior do sistema (útil 
após uma mudança no nível de execução). 
\item [\textbf{CONSOLE } ] A console do sistema. Isso 
na verdade é legado do kernel, ainda que se não configurado, \textbf{init } assumirá 
\textbf{/dev/console } como padrão. 
\end{dispitems}
 \subsubsection{INDICADORES DE INICIALIZAÇÃO }
É possível passar 
um número de indicadores para \textbf{init } a partir de um carregador de inicialização, 
como o LILO por exemplo. \textbf{Init } aceita os seguintes indicadores: \begin{dispitems}
\item [\textbf{S, single} 
 ] Inicialização do sistema em modo monousuário. Neste modo \textit{/etc/inittab 
} é examinado e os scripts ``rc'' de inicialização são normalmente executados 
antes do ambiente monousuário ser iniciado. 
\end{dispitems}


\begin{dispitems}
\item [\textbf{1-5}  ] Nível de execução a ser 
utilizado. 
\end{dispitems}


\begin{dispitems}
\item [\textbf{-b, emergency}  ] Inicializa diretamente em um ambiente monousuário 
sem executar qualquer programa adicional de inicialização. 
\end{dispitems}


 \subsubsection{INTERFACE }
Init 
ouve em uma \textit{fifo } em /dev, \textit{/dev/initctl }, esperando mensagens. \textbf{Telinit 
} usa este método para se comunicar com o init. A interface não é muito 
documentada ou acabada. Aqueles interessados em estudar o arquivo \textit{initreq.h 
} vão encontrá-lo no subdiretório  \textit{src/ } do arquivo de fontes  \textbf{init }.  \subsubsection{SINAIS 
}
Init reage a diversos sinais: \begin{dispitems}
\item [\textbf{SIGHUP}  ] Init verifica a existência de \textit{/etc/initrunlvl} 
 e \textit{/var/log/initrunlvl.} Caso algum deles exista e contenha um nível de 
execução em formato ASCII, init mudará o nível de execução do sistema 
para o novo indicado. \textit{ Esta funcionalidade é mantida por questões de compatibilidade! 
 }. No modo normal (os arquivos não existem) init reage como se \textbf{ telinit 
q } tivesse sido executado. 


\item [\textbf{SIGUSR1}  ] Ao receber este sinal, init fecha e 
reabre o seu controle FIFO em \textbf{/dev/initctl }. Útil para programas de inicialização 
quando /dev é remontado. 
\item [\textbf{SIGINT}  ] Normalmente o kernel envia este sinal 
ao init quando CTRL-ALT-DEL é pressionado. Ele ativa a ação \textit{ctrlaltdel }. 
\item [\textbf{SIGWINCH} 
 ] O kernel envia este sinal quando a tecla \textit{KeyboardSignal } é pressionada. 
Ele ativa a ação \textit{kbrequest }. 
\end{dispitems}
 \subsubsection{CONFORMIDADE }
\textbf{Init } é compatível com o init 
do System V. Trabalha de forma próxima junto com os programas e diretórios 
\textit{/etc/init.d } e \textit{/etc/rc\{runlevel\}.d }. Caso o seu sistema use esta convenção, 
deve haver um arquivo \textit{README } no diretório \textit{/etc/init.d } explicando como 
estes programas funcionam.  \subsubsection{ARQUIVOS }
/etc/inittab 

 /etc/initscript 

 /dev/console 


 /etc/ioctl.save 

 /var/run/utmp 

 /var/log/wtmp 

 /dev/initctl 

  \subsubsection{AVISOS }
\textbf{Init 
} assume que os processos e seus descendentes permaneçam no mesmo grupo 
em que foram criados. Caso o processo mude de grupo, \textbf{init } não poderá encerrá-lo 
e possivelmente deverão ser encerrados manualmente.  \subsubsection{DIAGNÓSTICOS }
Caso 
\textbf{init } descubra que está reinicializando uma entrada mais de 10 vezes em 
2 minutos, ele assumirá que há um erro na definição do comando e gerará 
uma mensagem de erro na console do sistema, e recusará reinicializar a 
entrada nos próximos 5 minutos ou caso receba algum sinal. Isso previne 
o uso indiscriminado de recurso do sistema, quando alguém comete um erro 
tipográfico no arquivo \textbf{/etc/inittab } ou o programa citado na entrada foi 
removido.  \subsubsection{AUTOR }
Miquel van Smoorenburg (miquels@cistron.nl), página inicial 
de manual por Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).  \subsubsection{VEJA 
TAMBÉM }
\textbf{\textsf{getty}(1)}, \textbf{\textsf{login}(1)}, \textbf{\textsf{sh}(1)}, \textbf{\textsf{who}(1)}, \textbf{\textsf{shutdown(8)},} \textbf{\textsf{kill}(1)}, \textbf{\textsf{inittab}(5)}, 
\textbf{\textsf{initscript}(5)}, \textbf{\textsf{utmp}(5)}  
