Pourquoi un redémarrage n'est-il requis que sur certaines mises à jour?

18

Pourquoi Ubuntu ne nécessite-t-il pas de redémarrage sur plus de mises à jour? Je sais que pour les mises à jour du noyau et des choses comme les pilotes vidéo, il ne peut pas charger les modifications sans redémarrage. Mais je suis curieux de connaître des mises à jour plus basiques de packages assez fondamentaux qui ne nécessitent souvent pas de redémarrage. Des choses comme Telepathy, glibc, gtk, etc. Pourquoi les packages comme celui-ci ne nécessitent-ils pas un redémarrage pour être mis à jour? La nouvelle version fonctionne-t-elle réellement juste après une mise à jour?

Un autre exemple serait Gwibber. J'ai récemment reçu et mis à jour vers gwibber via le gestionnaire de mise à jour pendant que gwibber était en cours d'exécution. La mise à jour s'est terminée avec succès. Gwibber exécuterait-il la nouvelle version sans la redémarrer manuellement? Et est-ce la même chose pour les autres packages? (Je sais que certains comme mysql et apache redémarrent automatiquement lors d'une mise à jour). Pour les packages qui ne redémarrent pas automatiquement, cela ne peut-il pas être un problème de sécurité pour le correctif de sécurité?

Cela vient parce que j'utilise OS X depuis environ une semaine et presque chaque mise à jour nécessite un redémarrage même si elle n'est pas liée au noyau / pilote vidéo (pour autant que je sache - ils ne vous donnent pas beaucoup d'informations ). Un de mes amis a dit qu'Apple redémarre sur la plupart des mises à jour "au cas où" ce serait bizarre si vous ne redémarriez pas. Windows est le pire car presque toute installation / désinstallation ou mise à jour nécessite un redémarrage (forçant souvent les arrêts à prendre très longtemps). Cela peut être un peu large pour ce lieu, mais pourquoi les différents systèmes d'exploitation gèrent-ils cela si différemment? Ou, plus spécifique à Ubuntu: pourquoi Ubuntu ne suit-il pas une politique de redémarrage plus stricte?

gregghz
la source

Réponses:

23

Chaque fois que vous ouvrez ou exécutez un fichier dans Windows, Windows verrouille le fichier en place (c'est une simplification, mais généralement vrai.) Vous avez peut-être rencontré ces erreurs ennuyeuses où vous ne pouvez pas supprimer un fichier car un autre processus a un verrou exclusif sur il. C'est pourquoi chaque fois que Windows doit se mettre à jour, vous avez besoin d'un redémarrage pour qu'il prenne effet. Windows mettra en file d'attente les activités de remplacement et de suppression de fichiers pour le prochain démarrage (lorsque rien n'a de verrou sur quoi que ce soit.)

D'un autre côté, Linux a un mécanisme dans lequel ce n'est pas le fichier qui est verrouillé mais les données sous-jacentes sur le disque qui le sont. Cela peut sembler une différenciation triviale, mais cela signifie que l'enregistrement du fichier dans la table des matières du système de fichiers peut être supprimé sans perturber aucun programme qui a déjà ouvert le fichier. Vous pouvez donc supprimer un fichier pendant qu'il est en cours d'exécution ou autrement utilisé et il continuera d'exister sur le disque tant qu'un processus aura un descripteur ouvert, même si son entrée dans la table de fichiers a disparu. Cela permet à Linux de remplacer complètement un programme pendant qu'il est encore en cours d'exécution, puis de simplement redémarrer le programme ou d'attendre que le processus se termine naturellement. Une fois l'ancien exemple tué,

Donc, tant qu'un fichier particulier n'est pas spécial d'une certaine manière (comme, par exemple, le fichier image du noyau ou des fichiers appartenant à des systèmes de bas niveau similaires), le programme de mise à jour peut généralement se mettre à jour sur place comme ceci. Je suis sûr qu'il y a des cas et des situations spéciales où ce ne serait pas une bonne idée, mais dans la plupart des cas, ça va.

Quant à savoir pourquoi OS X le fait, cette théorie "au cas où" semble plausible.

Andrew Lambert
la source
1
Pour démontrer le point de Amazed, créez un fichier test.py: #!/usr/bin/env python print raw_input()Exécuter ce avec python test.pyou chmod +x test.py && ./test.pyet, quand il vous demande d'entrée, rm test.py.
2011
La raison pour laquelle la plupart des programmes utilisateur ne sont pas redémarrés automatiquement est qu'ils sont censés avoir une durée de vie très courte et pratiquement aucun privilège pour changer le système. Si vous êtes inquiet, vous pouvez simplement vous déconnecter puis vous reconnecter, cela fermera tous les programmes que vous avez ouverts.
LassePoulsen
2
En particulier, dpkg installe les fichiers en les écrivant dans foo.dpkg-new, puis en les renommant par-dessus tout fichier précédent qui s'y trouvait, ce qui permet des mises à niveau en douceur des bibliothèques et des exécutables.
Colin Watson du