Por padrão, não, isso não é permitido. No Linux (de man 2 kill
):
The only signals that can be sent to process ID 1, the init process, are those for which init has explicitly installed signal handlers. This is done to assure the system is not brought down accidentally.
Pid 1 (init) pode decidir se permitir ser morto, em cujo caso o "kill" é basicamente um pedido para que ele se desligue. Esta é uma maneira possível de implementar o comando halt
, embora eu não saiba de nenhum init
que faça isso.
Em um Mac, matar launchd
(seu análogo de inicialização) com o sinal 15 (SIGTERM) reinicializará o sistema imediatamente, sem se preocupar em desligar programas em execução de forma limpa. Matá-lo com o sinal uncatchable 9 (SIGKILL) não faz nada, mostrando que as semânticas de kill()
do Mac são as mesmas que as do Linux a esse respeito.
No momento, eu não tenho uma caixa do Linux à mão com a qual estou disposto a experimentar, então a questão do que o E com projetos de substituição de init
do Linux faz com um SIGTERM terá que esperar. init
como Upstart e Systemd sendo populares atualmente, a resposta pode ser variável.
UPDATE : no Linux, init
ignora explicitamente o SIGTERM, por isso não faz nada. @jsbillings tem informações sobre o que o Upstart e o Systemd fazem.