No desligamento, os inversores de montagem ocorrem antes do manuseio do sinal de desligamento?

1

Portanto, com base na minha compreensão do processo de desligamento do Unix / Linux (que é altamente limitado, admito), acho que em algum momento essas etapas acontecem: 1. as unidades montadas são desmontadas 2. um sinal de terminação é enviado para os aplicativos em execução, o que permite que esses aplicativos façam a limpeza antes de sair

Agora, o que acontece primeiro? Ou o nº 1 não acontece? Ou a ordem não é garantida?

A razão pela qual faço esta pergunta é que estou trabalhando em um aplicativo que está gravando dados em um arquivo de configuração central no desligamento, onde o arquivo de configuração central pode ser colocado em qualquer lugar. Minha preocupação é que, se o arquivo de configuração central estiver em uma unidade montada, e # 1 acontecer antes de # 2, o caminho armazenado que eu tenho para o arquivo de configuração central pode não ser mais válido. Essa preocupação faz sentido?

    
por Rand McRanderson 09.11.2014 / 22:50

1 resposta

1

Isso depende do sistema init e de como está configurado. Mas qualquer configuração sensata permite que o software do sistema registre um gancho para ser executado no desligamento. Com um init tradicional do System V, esse é um arquivo em /etc/rc0.d . Com um init BSD tradicional, esse código está em /etc/rc.shutdown . Com Upstart, esse é um evento de mudança de nível para 0 ou 6. A lista continua, e é por isso que manter pacotes para todas as distribuições pode ser muito trabalhoso (a maioria dos autores forneceria um script de desligamento para seu aplicativo e deixaria um O mantenedor da distribuição faz um pacote que registra o script de desligamento no lugar certo).

Depois que todos os scripts específicos do aplicativo são executados, as fases finais do desligamento ocorrem. Normalmente, isso envolve desmontar todos os sistemas de arquivos, exceto aqueles onde ainda existem arquivos abertos, depois matar todos os processos restantes e, finalmente, desmontar os sistemas de arquivos restantes (exceto a raiz que é remontada somente leitura) e parar ou reinicializar o computador. É comum enviar a todos os processos um sinal TERM, que pode ser acessado, e alguns segundos depois enviar um sinal KILL. Enquanto um processo pode tentar reagir, o tempo é limitado e o sistema não espera.

Portanto, se o seu aplicativo estiver instalado como root, basta registrar um script de inicialização no momento do desligamento. Se o seu aplicativo é instalado por usuários sem privilégios, você não pode ter a garantia de que poderá fazer qualquer coisa durante a fase de desligamento.

Observe que você precisa lidar com uma falha do sistema ou falha de energia de qualquer maneira. As ações de tempo de desligamento devem ser limitadas a coisas que tornam a próxima inicialização mais eficiente, não deve haver nada que precise ser feito.

    
por 11.11.2014 / 05:02