Digamos que /usr/local/bin/ruby
está sendo executado em segundo plano e, em seguida, substituímos ruby
por uma versão diferente, ou até excluímos ruby
.
O que acontecerá com aqueles que executam processos ruby?
Depende exatamente de como o executável é atualizado. Se o mesmo arquivo for aberto e partes dele forem alteradas, coisas ruins acontecerão. Se ele for removido, o arquivo será removido da estrutura de diretórios do sistema de arquivos, mas na verdade não será desvinculado (ou seja, excluído) até que o último processo que o abra tenha sido executado. Portanto, se o executável for removido e um novo com o mesmo nome escrito em seu lugar, o antigo deverá continuar funcionando.
Eles vão continuar. Talvez caia horrivelmente se tentarem acessar a si mesmos e receber algo totalmente errado. Eu não faria isso a menos que eu tivesse que :)
fonte
fonte
Entendo que o kernel do Linux tenha um componente chamado loader que abre o próprio arquivo executável, contendo a imagem, durante o processo de carregamento / vinculação e, uma vez concluído o vínculo com as bibliotecas etc., o loader fecha o arquivo. Assim, esse processo acontece e é concluído quando o kernel realmente inicia o processo.
Não tenho certeza se o executável original no disco precisa ser referenciado se o executável mais tarde tentar importar bibliotecas externas.
Eu diria, e tem sido minha experiência que, se você excluir o executável no disco, o executável carregado na memória não será afetado. Da mesma forma, se o arquivo executável for substituído por uma versão mais recente, as atualmente em execução não serão "automaticamente" atualizadas, a menos que sejam interrompidas e reiniciadas.
Tive problemas com um controlador RAID que fez com que todo o disco em que o diretório raiz e outras partições estivesse montado agisse repentinamente como se estivesse desconectado. Não foi possível carregar novos programas, mas os da memória estavam funcionando bem até que precisassem de arquivos do disco.
fonte