Esta versão do LFS usa um aparato especial de inicialização chamado SysVinit, baseado em uma série de níveis de execução. O procedimento de inicialização pode ser bem diferente de um sistema para outro; o fato de que as coisas funcionam de uma maneira em uma distribuição específica do Linux não garante que elas funcionarão da mesma forma no LFS. O LFS tem a própria maneira de fazer as coisas, mas ele respeita os padrões geralmente aceitos.
Existe um procedimento alternativo de inicialização chamado systemd. Nós não mais discutiremos esse processo de inicialização aqui. Para uma descrição detalhada, visite-se https://www.linux.com/training-tutorials/understanding-and-using-systemd/.
O SysVinit (o qual será referido como “init” daqui pra frente)
usa um esquema de níveis de execução. Existem sete níveis de
execução, numerados de 0 a 6. (Atualmente, existem mais níveis de
execução, mas os outros são para casos especiais e geralmente não
são usados. Veja-se init(8)
para mais
detalhes). Cada um dos sete corresponde às ações que o computador é
suposto realizar quando ele inicia ou desliga. O nível de execução
padrão é o 3. Aqui estão as descrições dos diferentes níveis de
execução conforme eles estão implementados no LFS:
0: parar o computador
1: Modo de usuário(a) único(a)
2: Reservado para personalização, do contrário faz o mesmo que 3
3: Modo de multi-usuário(a), com rede de comunicação
4: Reservado para personalização, do contrário faz o mesmo que 3
5: Mesmo que 4, ele é usado usualmente para login GUI (como o gdm do GNOME ou o lxdm do LXDE)
6: reinicializar o computador
Classicamente, o nível de execução 2 acima era definido como "modo de multi-usuário(a), sem rede de comunicação", porém isso somente foi o caso muitos anos atrás quando múltiplos(as) usuários(as) podiam se conectar a um sistema via portas seriais. No ambiente da atualidade isso não faz sentido e agora nós dizemos que ele está "reservado".
Durante a inicialização do núcleo, o primeiro aplicativo que é
executado (se não substituído na linha de comando) é o init. Esse aplicativo lê o
arquivo de inicialização /etc/inittab
. Crie esse arquivo com:
cat > /etc/inittab << "EOF"
# Início do /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc S
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S06:once:/sbin/sulogin
s1:1:respawn:/sbin/sulogin
1:2345:respawn:/sbin/agetty --noclear tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
# Fim do /etc/inittab
EOF
Uma explicação desse arquivo de inicialização está na página de
manual para inittab. No LFS,
o comando chave é rc.
O arquivo de inicialização acima instrui rc a executar todos os scripts
começando com um S no diretório /etc/rc.d/rcS.d
seguido por todos os scripts
começando com um S no diretório /etc/rc.d/rc?.d
onde o ponto de interrogação é
especificado pelo valor de initdefault.
Como uma conveniência, o script rc lê uma biblioteca de funções
em /lib/lsb/init-functions
. Essa
biblioteca também lê um arquivo de configuração opcional,
/etc/sysconfig/rc.site
. Quaisquer dos
parâmetros de configuração do sistema descritos em seções
subsequentes podem ser colocados nesse arquivo, permitindo a
consolidação de todos os parâmetros do sistema nesse único arquivo.
Como uma conveniência de depuração, o script de funções também
registra todas as saídas geradas em /run/var/bootlog
. Dado que o diretório
/run
é um tmpfs, esse arquivo não é
persistente ao longo de inicializações; entretanto, ele é
adicionado ao arquivo mais permanente /var/log/boot.log
ao final do processo de
inicialização.
A mudança de níveis de execução é feita com init <runlevel>
,
onde <runlevel>
é
o nível de execução alvo. Por exemplo, para reinicializar o
computador, um(a) usuário(a) poderia emitir o comando
init 6, o qual é um
apelido para o comando reboot. Da mesma forma,
init 0 é um apelido
para o comando halt.
Existe um número de diretórios sob /etc/rc.d
que se parecem com rc?.d
(onde ? é o número do nível de execução)
e rcS.d
, todos contendo um número
de links simbólicos. Alguns links começam com um K, os outros começam com um
S, e todos eles tem dois
números seguindo a letra inicial. O K significa parar (kill) um
serviço e o S significa iniciar um serviço. Os números determinam
a ordem na qual os scripts são executados, de 00 a 99—quanto
menor o número, mais cedo o script executa. Quando init alterna para outro nível
de execução, os serviços adequados são tanto iniciados quanto
parados, dependendo do nível de execução escolhido.
Os scripts reais estão em /etc/rc.d/init.d
. Eles fazem o trabalho atual e
os links simbólicos todos apontam para eles. Os links K e os
links S apontam para o mesmo script em /etc/rc.d/init.d
. Isso é porque os scripts
podem ser chamados com parâmetros diferentes como start
, stop
, restart
, reload
e status
. Quando um link K é
encontrado, o script apropriado é executado com o argumento
stop
. Quando um link S é
encontrado, o script apropriado é executado com o argumento
start
.
Estas são descrições do que os argumentos fazem os scripts fazer:
start
O serviço é iniciado.
stop
O serviço é parado.
restart
O serviço é parado e então iniciado novamente.
reload
A configuração do serviço é atualizada. Isso é usado depois que o arquivo de configuração de um serviço foi modificado, quando o serviço não precisa ser reiniciado.
status
Diz se o serviço está executando e com quais PIDs.
Sinta-se livre para modificar a maneira como o processo de inicialização funciona (afinal de contas, este é seu próprio sistema LFS). Os arquivos dados aqui são um exemplo de como isso pode ser feito.
O script de iniciação /etc/rc.d/init.d/udev
inicia o udevd, aciona quaisquer
dispositivos "plugue frio" que já tenham sido criados pelo núcleo e
aguarda por quaisquer regras para completar. O script também
desconfigura o manuseador do uevent do padrão do /sbin/hotplug
. Isso é feito, pois o núcleo não
mais precisa chamar um binário externo. Em vez disso, o
udevd escutará em um
soquete de link de rede os uevents que o núcleo gera.
O script /etc/rc.d/init.d/udev_retry se
ocupa de re-acionar eventos para subsistemas cujas regras
possivelmente dependam de sistemas de arquivos que não estão
montados até que o script mountfs seja executado (em
particular, /usr
e /var
possivelmente causem isso). Esse script
executa depois do script mountfs, de forma que aquelas
regras (se re-acionadas) deveriam prosperar na segunda vez. Ele é
configurado pelo arquivo /etc/sysconfig/udev_retry
; quaisquer palavras
nesse arquivo outras que comentários são consideradas nomes de
subsistema para acionar ao tempo de re-tentativa. Para encontrar o
subsistema de um dispositivo, use udevadm info --attribute-walk
<dispositivo>, onde <dispositivo> é um
caminho absoluto em /dev ou /sys, tais como /dev/sr0 ou
/sys/class/rtc.
Para informação acerca de carregamento de módulo do núcleo e Udev, veja-se Seção 9.3.2.3, “Carregamento de Módulo”.
O script setclock lê
a hora a partir do relógio do hardware, também conhecido como
relógio do BIOS ou do Complementary Metal Oxide Semiconductor
(CMOS). Se o relógio do hardware estiver configurado para UTC,
[então] esse script converterá a hora do relógio do hardware para a
hora local usando o arquivo /etc/localtime
(o qual diz ao aplicativo
hwclock qual fuso
horário usar). Não existe maneira de detectar se o relógio do
hardware está ou não configurado para UTC, de forma que isso
precisa ser configurado manualmente.
O aplicativo setclock é executado via udev quando o núcleo detecta o recurso do hardware em consequência da inicialização. Ele também pode ser executado manualmente com o parâmetro pare para armazenar a hora do sistema para o relógio CMOS.
Se você não conseguir lembrar se o relógio do hardware está ou não
configurado para UTC, [então] descubra executando o comando
hwclock --localtime
--show
. Isso mostrará o que é a hora atual de
acordo com o relógio do hardware. Se essa hora corresponder à que o
seu relógio diz, então o relógio do hardware está configurado para
hora local. Se a saída gerada originária do hwclock não for a hora local,
[então] as chances são as de que ele esteja configurado para hora
UTC. Verifique isso adicionando ou subtraindo a número apropriado
de horas para o seu fuso horário à (da) hora mostrada pelo
hwclock. Por exemplo,
se você estiver atualmente no fuso horário MST, o qual é conhecido
também como GMT -0700, [então] adicione sete horas à hora local.
Mude o valor da variável UTC
abaixo para
um valor de 0
(zero) se o
relógio do hardware NÃO
estiver configurado para hora UTC.
Crie um novo arquivo /etc/sysconfig/clock
executando o seguinte:
cat > /etc/sysconfig/clock << "EOF"
# Início do /etc/sysconfig/clock
UTC=1
# Configure isto para quaisquer opções que você pudesse precisar dar para hwclock,
# tais como tipo do relógio de hardware de máquina para Alphas.
CLOCKPARAMS=
# Fim do /etc/sysconfig/clock
EOF
Uma boa dica explicando como lidar com hora no LFS está disponível
em https://www.linuxfromscratch.org/hints/downloads/files/time.txt.
Ela explica problemas como fusos horários, UTC e a variável de
ambiente TZ
.
Os parâmetros CLOCKPARAMS e UTC também possivelmente sejam
configurados no arquivo /etc/sysconfig/rc.site
.
Esta seção discute como configurar o script de inicialização
console que configura
o mapa de teclado, fonte do console e nível de registro do núcleo
do console. Se caracteres não-ASCII (por exemplo, o sinal de
direitos autorais, o sinal da libra britânica e o símbolo do Euro)
não serão usados e o teclado for um dos Estados Unidos da América
do Norte, [então] muito desta seção pode ser pulada. Sem o arquivo
de configuração, (ou configurações equivalentes em rc.site
), o script de inicialização console não fará nada.
O script console lê o
arquivo /etc/sysconfig/console
para
informação de configuração. Decida qual mapa de teclas e fonte de
tela serão usados. Vários HOWTOs específicos de idiomas também
podem ajudar com isso; veja-se https://tldp.org/HOWTO/HOWTO-INDEX/other-lang.html.
Se ainda em dúvida, [então] olhe nos diretórios /usr/share/keymaps
e /usr/share/consolefonts
para mapas de teclas
válidos e fontes de tela. Leiam-se as páginas de manual
loadkeys(1)
e setfont(8)
para determinar os argumentos corretos
para esses aplicativos.
O arquivo /etc/sysconfig/console
deveria conter linhas da forma: VARIÁVEL="valor". As seguintes
variáveis são reconhecidas:
Essa variável especifica o nível de registro para mensagens do núcleo enviadas para o console, conforme configurado por dmesg -n. Níveis válidos são de "1" (sem mensagens) até "8". O nível padrão é "7".
Essa variável especifica os argumentos para o aplicativo loadkeys, tipicamente, o nome do mapa de teclas a carregar, por exemplo, “it”. Se essa variável não estiver configurada, [então] o script de inicialização não executará o aplicativo loadkeys e o mapa padrão de teclas do núcleo será usado. Observe que uns poucos mapas de teclas tem múltiplas versões com o mesmo nome (cz e variantes dele em qwerty/ e qwertz/; es em olpc/ e qwerty/; e trf em fgGIod/ e qwerty/). Nesses casos, o diretório ancestral também deveria ser especificado (por exemplo, qwerty/es) para garantir que o mapa de teclas adequado seja carregado.
Essa (raramente usada) variável especifica os argumentos para a segunda chamada ao aplicativo loadkeys. Isso é útil se o mapa padrão de teclas não for completamente satisfatório e um pequeno ajuste tenha que ser feito. Por exemplo, para incluir o símbolo do Euro em um mapa de teclas que normalmente não o tem, configure essa variável para “euro2”.
Essa variável especifica os argumentos para o aplicativo setfont. Tipicamente, isso inclui o nome da fonte, “-m”, e o nome do mapa de caracteres de aplicação a carregar. Por exemplo, para a finalidade de carregar a fonte “lat1-16” juntamente com o mapa de caracteres de aplicação “8859-1” (apropriado nos Estados Unidos da América do Norte), configure essa variável para “lat1-16 -m 8859-1”. Em modo UTF-8, o núcleo usa o mapa de caracteres de aplicação para converter os códigos de tecla de 8 bits para UTF-8. Dessa maneira, o argumento do parâmetro "-m" deveria ser configurado para a codificação dos códigos compostos de tecla no mapa de teclas.
Configure essa variável para “1”, “yes” ou “true” para a finalidade de colocar o console em modo UTF-8. Isso é útil em locales baseados em UTF-8 e danoso de outra forma.
Para muitos esquemas de teclado, não existe mapa padrão de teclado Unicode no pacote Kbd. O script de inicialização console converterá um mapa de teclas disponível para UTF-8 em tempo real se essa variável estiver configurada para a codificação do mapa disponível de teclas não-UTF-8.
Alguns exemplos:
Para uma configuração não-Unicode, somente as variáveis KEYMAP e FONT geralmente são necessárias. Por exemplo, para uma configuração em polonês, alguém usaria:
cat > /etc/sysconfig/console << "EOF"
# Início do /etc/sysconfig/console
KEYMAP="pl2"
FONT="lat2a-16 -m 8859-2"
# Fim do /etc/sysconfig/console
EOF
Como mencionado acima, às vezes é necessário ajustar um mapa padrão de teclas um pouco. O exemplo seguinte adiciona o símbolo do Euro ao mapa de teclas alemão:
cat > /etc/sysconfig/console << "EOF"
# Iníco do /etc/sysconfig/console
KEYMAP="de-latin1"
KEYMAP_CORRECTIONS="euro2"
FONT="lat0-16 -m 8859-15"
UNICODE="1"
# Fim do /etc/sysconfig/console
EOF
O seguinte é um exemplo habilitado para Unicode para búlgaro, onde um mapa padrão de teclas UTF-8 existe:
cat > /etc/sysconfig/console << "EOF"
# Início do /etc/sysconfig/console
UNICODE="1"
KEYMAP="bg_bds-utf8"
FONT="LatArCyrHeb-16"
# Fim do /etc/sysconfig/console
EOF
Devido ao uso de uma fonte LatArCyrHeb-16 de 512 glifos no exemplo anterior, cores brilhantes não mais estão disponíveis no console do Linux, a menos que uma parte da RAM usada para armazenamento temporário de dados que estão esperando para serem enviados para um dispositivo e que armazene o conteúdo de uma imagem pixel por pixel seja usada. Se alguém quiser ter cores brilhantes sem uma parte da RAM usada para armazenamento temporário de dados que estão esperando para serem enviados para um dispositivo e que armazene o conteúdo de uma imagem pixel por pixel e puder viver sem caracteres que não pertencem a seu idioma, [então] ainda é possível usar uma fonte de 256 glifos específica para o idioma, conforme ilustrado abaixo:
cat > /etc/sysconfig/console << "EOF"
# Início do /etc/sysconfig/console
UNICODE="1"
KEYMAP="bg_bds-utf8"
FONT="cyr-sun16"
# Fim do /etc/sysconfig/console
EOF
O seguinte exemplo ilustra conversão automática de mapa de teclas de ISO-8859-15 para UTF-8 e habilitação de teclas mortas em modo Unicode:
cat > /etc/sysconfig/console << "EOF"
# Início do /etc/sysconfig/console
UNICODE="1"
KEYMAP="de-latin1"
KEYMAP_CORRECTIONS="euro2"
LEGACY_CHARSET="iso-8859-15"
FONT="LatArCyrHeb-16 -m 8859-15"
# Fim do /etc/sysconfig/console
EOF
Alguns mapas de teclas tem teclas mortas (isto é, teclas que não produzem um carácter por elas próprias, mas põem um acento no carácter produzido pela próxima tecla) ou definem regras de composição (tais como: “press Ctrl+. A E para obter Æ” no mapa de teclas padrão). O Linux-6.1.11 interpreta teclas mortas e regras de composição no mapa de teclas corretamente somente quando os caracteres fonte a serem compostos juntos não são multi-byte. Essa deficiência não afeta mapas de teclas para idiomas europeus, pois lá acentos são adicionados a caracteres ASCII não acentuados, ou dois caracteres ASCII são compostos juntos. Entretanto, em modo UTF-8 isso é um problema; por exemplo, para o idioma grego, onde alguém de vez em quando precisa colocar um acento na letra “alpha”. A solução é ou evitar o uso de UTF-8, ou instalar o sistema de janelas X que não tem essa limitação no manuseio de entradas geradas dele.
Para chinês, japonês, coreano e alguns outros idiomas, o console do Linux não pode ser configurado para exibir os caracteres necessários. Usuários(as) que precisam de tais idiomas deveriam instalar o Sistema de Janelas X, fontes que cobrem os intervalos necessários de caracteres, e o método de entrada adequado (por exemplo, SCIM, suporta uma ampla variedade de idiomas).
O arquivo /etc/sysconfig/console
somente controla a localização do console de texto do Linux. Ele
não tem nada a ver com configurar o esquema adequado de teclado e
fontes de terminal no Sistema de Janelas X; com sessões do ssh;
ou com um console serial. Em tais situações, as limitações
mencionadas nos últimos dois itens de lista acima não se aplicam.
De vez em quando, é desejável criar arquivos em tempo de
inicialização. Por exemplo, o diretório /tmp/.ICE-unix
frequentemente é necessário. Isso
pode ser feito criando-se uma entrada no script de configuração
/etc/sysconfig/createfiles
. O formato
desse arquivo está embutido nos comentários do arquivo padrão de
configuração.
O script sysklogd
invoca o aplicativo
syslogd como uma
parte da inicialização do System V. A opção -m 0
desliga a marca de carimbo de
tempo periódica que o syslogd escreve nos arquivos de
registro a cada 20 minutos por padrão. Se você quiser ligar essa
marca de carimbo de tempo periódica, [então] edite /etc/sysconfig/rc.site
e defina a variável
SYSKLOGD_PARMS para o valor desejado. Por exemplo, para remover
todos os parâmetros, configure a variável para um valor nulo:
SYSKLOGD_PARMS=
Veja-se man syslogd
para mais opções.
O arquivo opcional /etc/sysconfig/rc.site
contém configurações que
são automaticamente configuradas para cada script de inicialização
do SystemV. Ele pode alternativamente configurar os valores
especificados nos arquivos hostname
,
console
e clock
no diretório /etc/sysconfig/
. Se as variáveis associadas
estiverem presentes em ambos desses arquivos separados e
rc.site
, [então] os valores nos
arquivos específicos de script tem precedência.
rc.site
também contém parâmetros que
podem personalizar outros aspectos do processo de inicialização.
Configurar a variável IPROMPT habilitará a execução seletiva de
scripts de inicialização. Outras opções estão descritas nos
comentários de arquivo. A versão padrão do arquivo é como se segue:
# rc.site # Optional parameters for boot scripts. # Distro Information # These values, if specified here, override the defaults #DISTRO="Linux From Scratch" # The distro name #DISTRO_CONTACT="lfs-dev@lists.linuxfromscratch.org" # Bug report address #DISTRO_MINI="LFS" # Short name used in filenames for distro config # Define custom colors used in messages printed to the screen # Please consult `man console_codes` for more information # under the "ECMA-48 Set Graphics Rendition" section # # Warning: when switching from a 8bit to a 9bit font, # the linux console will reinterpret the bold (1;) to # the top 256 glyphs of the 9bit font. This does # not affect framebuffer consoles # These values, if specified here, override the defaults #BRACKET="\\033[1;34m" # Blue #FAILURE="\\033[1;31m" # Red #INFO="\\033[1;36m" # Cyan #NORMAL="\\033[0;39m" # Grey #SUCCESS="\\033[1;32m" # Green #WARNING="\\033[1;33m" # Yellow # Use a colored prefix # These values, if specified here, override the defaults #BMPREFIX=" " #SUCCESS_PREFIX="${SUCCESS} * ${NORMAL} " #FAILURE_PREFIX="${FAILURE}*****${NORMAL} " #WARNING_PREFIX="${WARNING} *** ${NORMAL} " # Manually set the right edge of message output (characters) # Useful when resetting console font during boot to override # automatic screen width detection #COLUMNS=120 # Interactive startup #IPROMPT="yes" # Whether to display the interactive boot prompt #itime="3" # The amount of time (in seconds) to display the prompt # The total length of the distro welcome string, without escape codes #wlen=$(echo "Welcome to ${DISTRO}" | wc -c ) #welcome_message="Welcome to ${INFO}${DISTRO}${NORMAL}" # The total length of the interactive string, without escape codes #ilen=$(echo "Press 'I' to enter interactive startup" | wc -c ) #i_message="Press '${FAILURE}I${NORMAL}' to enter interactive startup" # Set scripts to skip the file system check on reboot #FASTBOOT=yes # Skip reading from the console #HEADLESS=yes # Write out fsck progress if yes #VERBOSE_FSCK=no # Speed up boot without waiting for settle in udev #OMIT_UDEV_SETTLE=y # Speed up boot without waiting for settle in udev_retry #OMIT_UDEV_RETRY_SETTLE=yes # Skip cleaning /tmp if yes #SKIPTMPCLEAN=no # For setclock #UTC=1 #CLOCKPARAMS= # For consolelog (Note that the default, 7=debug, is noisy) #LOGLEVEL=7 # For network #HOSTNAME=mylfs # Delay between TERM and KILL signals at shutdown #KILLDELAY=3 # Optional sysklogd parameters #SYSKLOGD_PARMS="-m 0" # Console parameters #UNICODE=1 #KEYMAP="de-latin1" #KEYMAP_CORRECTIONS="euro2" #FONT="lat0-16 -m 8859-15" #LEGACY_CHARSET=
Os scripts de inicialização do LFS inicializam e desligam um
sistema de uma maneira bastante eficiente, porém existem uns
poucos ajustes que você pode fazer no arquivo rc.site para
aumentar a velocidade ainda mais e ajustar mensagens de acordo
com suas preferências. Para fazer isso, ajuste as configurações
no arquivo /etc/sysconfig/rc.site
acima.
Durante o script de inicialização udev
, existe uma chamada para
udev settle
que exige algum tempo para completar. Esse tempo
possivelmente ou possivelmente não seja exigido dependendo
dos dispositivos no sistema. Se você tiver somente
partições simples e uma placa ethernet, [então] o processo
de inicialização provavelmente não precisará esperar por
esse comando. Para pulá-lo, configure a variável
OMIT_UDEV_SETTLE=y.
O script de inicialização udev_retry
também executa udev settle por padrão.
Esse comando é necessário somente se o diretório
/var
for montado
separadamente, pois o relógio precisa do arquivo
/var/lib/hwclock/adjtime
.
Outras personalizações possivelmente também precisem
esperar que o Udev complete, porém em muitas instalações
ele não é necessário. Pule o comando configurando a
variável OMIT_UDEV_RETRY_SETTLE=y.
Por padrão, as verificações do sistema de arquivos são silenciosas. Isso pode parecer um atraso durante o processo de inicialização. Para ligar a saída gerada do fsck, configure a variável VERBOSE_FSCK=y.
Quando reinicializar, você possivelmente queira pular a
verificação do sistema de arquivos, fsck, completamente. Para
fazer isso, ou crie o arquivo /fastboot
ou reinicialize o sistema com o
comando /sbin/shutdown -f -r
now. Por outro lado, você pode forçar que
todos os sistemas de arquivos sejam verificados criando
/forcefsck
ou executando
shutdown com
o parâmetro -F
em
vez de -f
.
Configurar a variável FASTBOOT=y desabilitará fsck durante o processo de inicialização até que ela seja removida. Isso não é recomendado em uma base permanente.
Normalmente, todos os arquivos no diretório /tmp
são deletados em tempo de
inicialização. Dependendo do número de arquivos ou
diretórios presentes, isso pode causar um atraso notável no
processo de inicialização. Para pular a remoção desses
arquivos configure a variável SKIPTMPCLEAN=y.
Durante o desligamento, o aplicativo init envia um sinal TERM para cada aplicativo que ele tenha iniciado (por exemplo agetty), espera um tempo configurado (padrão 3 segundos), então envia a cada processo um sinal KILL e aguarda novamente. Esse processo é repetido no script sendsignals para quaisquer processos que não sejam desligados pelos scripts próprios deles. O atraso para init pode ser configurado passando-se um parâmetro. Por exemplo, para remover o atraso no init, passe o parâmetro -t0 quando desligar ou reinicializar (por exemplo /sbin/shutdown -t0 -r now). O atraso para o script sendsignals pode ser pulado configurando-se o parâmetro KILLDELAY=0.