O root pode matar o processo init (o processo com o pid 1)? Quais seriam suas consequências?
Por padrão, não, isso não é permitido. No Linux (de man 2 kill
):
Os únicos sinais que podem ser enviados para o ID do processo 1, o processo init, são aqueles para os quais o init instalou explicitamente manipuladores de sinal. Isso é feito para garantir que o sistema não seja desativado acidentalmente.
O Pid 1 (init) pode decidir se permitir ser morto; nesse caso, o "kill" é basicamente um pedido para que se desligue. Essa é uma maneira possível de implementar o halt
comando, embora eu não conheça ninguém init
que faça isso.
Em um Mac, matar launchd
(seu analógico init) com o sinal 15 (SIGTERM) reinicia imediatamente o sistema, sem se preocupar em desligar os programas em execução de forma limpa. Matá-lo com o sinal inacessível 9 (SIGKILL) não faz nada, mostrando que a kill()
semântica do Mac é a mesma que a do Linux a esse respeito.
No momento, não tenho uma caixa do Linux à mão com a qual estou disposto a experimentar; portanto, a questão do que o Linux E com init
faz com o SIGTERM terá que esperar. init
projetos de substituição como o Upstart e Systemd sendo populares hoje em dia, a resposta pode ser variável.
ATUALIZAÇÃO : No Linux, init
ignora explicitamente o SIGTERM, por isso não faz nada. O @jsbillings tem informações sobre o que o Upstart e o Systemd fazem.
init
com um sinalSegmentation fault
(SIGSEGV
), o que resultará em pânico no kernel:kill -SEGV 1
O init do SysV ignora os sinais SIGKILL ou SIGTERM. O único sinal que causa uma mudança de estado é o SIGPWR, até onde eu sei, que programa um desligamento relacionado à energia.
Parece que o Upstart e o Systemd também não respondem ao SIGKILL e, pelo meu teste, parece que um SIGTERM faz com que o Upstart e o systemd sejam reexecutados.
Não tenho certeza do que os outros atendentes estão executando, mas tenho certeza de que você não pode matar -9 (SIGKILL) ou kill -15 (SIGTERM) init (pid 1). Muito provavelmente, se você pudesse, teria um pânico no kernel porque o init saiu inesperadamente com um código de saída diferente de zero, o que seria menor que o ideal. Ele não desliga o computador ou faz com que ele seja reiniciado.
fonte
Tecnicamente sim, o root pode emitir um SIGKILL para iniciar. O init, no entanto, difere da maioria, quase todos os outros processos, na medida em que é permitido capturar e ignorar o sinal.
Você pode, vagamente, matar o init emitindo um
kill -TERM 1
que seria análogo ao emitir umhalt
oushutdown
nesse init passará o sinal para todos os filhos, essencialmente todos os outros processos, antes de honrar o próprio sinal.Por favor, note: executar este comando vontade desligar o sistema.
Para sabor; um tipo de outro processo que pode "ignorar" um SIGKILL é aquele em suspensão ininterrupta, como um que espera por E / S. Esse processo pode ser encontrado emitindo um
ps axo stat,comm
processo em que o status 'D' é ininterrupto.fonte
kill -TERM 1
nada fará além de fazer com que o init seja reexecutado na maioria dos sistemas Linux, e a única coisa que você poderia fazer parakill -PWR 1
kill -TERM 1
definitivamente causa uma reinicialização (realmente passando pela::shutdown:
entrada e pelo script associado no inittab.)Você pode reiniciar o
init
processo. Isso é útil para fazer alteraçõesinittab
sem precisar reiniciar.Fonte: http://www.cyberciti.biz/faq/linux-unix-kill-hup-1-reread-etcinittab-file/
fonte
init
sei que esse sinal não faz o processo reiniciar, mas apenas para recarregar o/etc/inittab
arquivo. --- Contráriosystemctl daemon-reexec
realmente fazsystemd
(init
substituição no Linux) para re-executar.sudo kill -INT 1
(interrupção) reiniciará o sistema esudo kill -SEGV 1
(violação de segmentação) ousudo kill -ABRT 1
(abortar) gerará um pânico no kernel.nota: sudo é necessário.
fonte
Bem, o root pode matar o processo init no Linux:
Detalhes:
kill -9 1
não funciona:Então, vamos correr
strace
:fonte
SIGKILL
aPID1
desde github.com/torvalds/linux/commit/... foi incorporada.Digite
sudo kill -INT 1
e veja o que acontece.fonte