Um processo pode ser iniciado durante o encerramento do sistema Linux?

1

Esta questão é sobre um script que contém um bloqueio para evitar várias instâncias executadas simultaneamente de si mesmo, que é executado em determinados momentos por vários processos e que envia comandos de reinicialização em determinadas situações.

Vamos supor que uma reinicialização é solicitada e o script fica suspenso por alguns segundos (para evitar liberar o bloqueio antes que a reinicialização seja iniciada). O script receberá um sinal e terminará (e, com isso, liberará o bloqueio).

Pergunta: Existe uma janela de tempo possível, em que esse script já foi interrompido pelo evento de reinicialização e ainda outros processos estão em execução, que conseguem iniciar o script novamente?

Meu sentimento pessoal é que os sistemas Linux primeiro mudam para um estado em que a execução de novos processos é impedida em geral e depois que os processos em execução são interrompidos. Mas isso é apenas uma ilusão, já que não consigo encontrar documentação sobre isso.

Alguns esclarecimentos:

a) Não é sobre o arquivo de bloqueio não ser removido corretamente. Quando uso o flock, o bloqueio desaparece no momento em que o script termina, mesmo em caso de falhas.

b) Na maioria dos casos, o script é iniciado com permissões de root pelo deamon.

    
por philipp 01.06.2016 / 12:08

1 resposta

0

Seus sentimentos pessoais têm alguma verdade nisso.

Eu não vou muito em detalhes, mas um processo de inicialização do Linux pode ser resumido da seguinte forma. (Sujeito a alterações, como o init não é mais o padrão).

  1. O gerenciador de inicialização passa o controle para o kernel do Linux e init .
  2. init então passa por suas listas de verificação e começa a atravessar seus runmodes
  3. init entra no nível de execução 1. Este também é chamado de modo de usuário único, e é aí que ele inicia os serviços essenciais para um sistema funcional. Somente processos pertencentes ao root podem ser iniciados.
  4. init entra no nível de execução 2. Semelhante ao modo acima, mas multiusuário. Processos de outros usuários participam da festa.
  5. O nível de execução 3 inicia a rede.
  6. 4 é ignorado (nunca entendi o porquê. Perpetuamente reservado para uso futuro, eu acho). Em vez disso, init vai diretamente para 5, que é onde xorg é iniciado. Muitos serviços de espaço do usuário (servidores da Web, correio, etc etc) são geralmente iniciados aqui.

Agora, para responder à sua pergunta, acho muito improvável que o script seja capaz de iniciar durante o processo de desligamento do sistema. Se bem me lembro, não é possível iniciar novos processos o caminho normal durante este processo. Pelo que entendi, a principal preocupação é que o script fosse iniciado e deixasse um arquivo de travamento que seria deixado durante a reinicialização, evitando assim que o script fosse executado, estou correto? O que eu faria nesse caso é ter um pequeno script de inicialização, talvez no nível de execução 3, que excluiria esse arquivo de trava, se encontrado.

    
por 01.06.2016 / 12:24

Tags