Por que uma reinicialização é necessária apenas em algumas atualizações?


18

Por que o Ubuntu não requer reinicializações em mais atualizações? Eu sei que para atualizações do kernel e coisas como drivers de vídeo, ele não pode carregar as alterações sem reiniciar. Mas estou curioso sobre atualizações mais básicas de pacotes bastante fundamentais que geralmente não exigem reinicializações. Coisas como Telepathy, glibc, gtk, etc. Por que pacotes como este não exigem uma reinicialização para serem atualizados? A nova versão está realmente em execução logo após uma atualização?

Outro exemplo seria Gwibber. Recentemente, recebi e atualizei para o gwibber por meio do Update Manager enquanto o gwibber estava em execução. A atualização foi concluída com sucesso. O gwibber estaria executando a nova versão sem a reiniciar manualmente? E isso é o mesmo para outros pacotes? (Eu sei que alguns como mysql e apache são reiniciados automaticamente em uma atualização). Para pacotes que não são reiniciados automaticamente, isso não pode ser um problema de segurança para correção de segurança?

Isso ocorre porque eu estou executando o OS X há cerca de uma semana e quase todas as atualizações exigem uma reinicialização, mesmo que não esteja relacionado ao driver do kernel / vídeo (tanto quanto eu posso dizer - eles não fornecem muitas informações ) Um amigo meu disse que as forças da Apple são reiniciadas na maioria das atualizações "por precaução"; seria estranho se você não reiniciasse. O Windows é o pior porque quase qualquer instalação / desinstalação ou atualização requer reinicialização (geralmente forçando os desligamentos a demorar muito tempo). Isso pode ser um pouco amplo para esse local, mas por que os diferentes sistemas operacionais lidam com isso de maneira tão diferente? Ou, mais específico para o Ubuntu: por que o Ubuntu não segue uma política de reinicialização mais rigorosa?

Respostas:


23

Sempre que você abre ou executa um arquivo no Windows, o Windows bloqueia o arquivo no local (isso é uma simplificação, mas geralmente é verdade.) Você pode encontrar esses erros irritantes em que não é possível excluir um arquivo porque outro processo possui um bloqueio exclusivo. isto. É por isso que sempre que o Windows precisa se atualizar, é necessário reiniciar o computador para que ele entre em vigor. O Windows enfileirará as atividades de substituição e exclusão de arquivos para a próxima inicialização (quando nada tiver bloqueio).

Por outro lado, o Linux possui um mecanismo no qual não é o arquivo que está bloqueado, mas os dados subjacentes no disco. Isso pode parecer uma diferenciação trivial, mas significa que o registro do arquivo no índice do sistema de arquivos pode ser excluído sem atrapalhar qualquer programa que já tenha o arquivo aberto. Portanto, você pode excluir um arquivo enquanto ele ainda estiver em execução ou estiver em uso e ele continuará existindo no disco enquanto algum processo tiver um identificador aberto, mesmo que sua entrada na tabela de arquivos tenha desaparecido. Isso permite que o Linux substitua um programa completamente enquanto ele ainda está em execução e, em seguida, simplesmente reinicie o programa ou aguarde o processo sair naturalmente. Depois que a instância antiga é morta,

Portanto, desde que um arquivo em particular não seja especial de alguma forma (como, por exemplo, o arquivo de imagem do kernel ou arquivos pertencentes a sistemas de nível semelhante), o atualizador geralmente pode atualizar no local como este. Tenho certeza de que existem casos e situações especiais em que isso não seria uma boa ideia, mas, na maioria dos casos, tudo bem.

Quanto ao motivo pelo qual o OS X faz isso, essa teoria "por precaução" parece plausível.


11
Para demonstrar o ponto de vista do Amazed, crie um arquivo test.py: #!/usr/bin/env python print raw_input()Execute isto com python test.pyou chmod +x test.py && ./test.pye, quando solicitar uma entrada rm test.py,.
raylu

A razão pela qual a maioria dos programas de usuário não é reiniciada automaticamente é que eles são considerados de vida útil muito curta e praticamente sem privilégios para alterar o sistema. Se você estiver preocupado, basta fazer o logout e, em seguida, entrar novamente, isso fechará todos os programas que você abriu.
LassePoulsen

2
Em particular, o dpkg instala arquivos gravando-os em foo.dpkg-new e, em seguida, renomeia-os por cima de qualquer arquivo anterior existente, o que permite atualizações suaves no local de bibliotecas e executáveis.
Colin Watson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.