Que se passe-t-il si je laisse accidentellement une application en cours d'exécution et que je clique sur «Installer maintenant» dans Software Updater?

22

L'outil de update-managermise à jour de logiciels apparaît et affiche des mises à jour de sécurité pour Firefox, par exemple. Naturellement, je clique sur "Installer maintenant" pour continuer.

Cependant, que se passe-t-il si j'ai toujours Firefox en cours d'exécution lorsque je fais cela? Va-t-il toujours mettre à jour Firefox? La mise à jour sera-t-elle ignorée et réapparaîtra-t-elle la prochaine fois? La mise à jour forcera-t-elle Firefox à se fermer et peut-être à planter? Cela ne mettra-t-il que partiellement à jour le logiciel et éventuellement interrompra mon installation de Firefox?

finefoot
la source
10
Rien ne se passe, Firefox est ouvert dans Ram. Parfois, il détecte la mise à jour et vous demande de redémarrer le navigateur. Mais peut-être que quelqu'un avec plus de perspicacité et de références peut donner une meilleure réponse.
pLumo
3
Je ne connais pas spécifiquement Ubuntu, mais sur Arch (et je ne pense pas que ce soit si différent dans ce cas), la mise à jour de firefox sous ses pieds pendant le fonctionnement semble fonctionner, mais la première chose que vous faites dans firefox plante le chose. J'ai toujours attribué cela à la nature complexe des navigateurs modernes, chargeant à l'exécution toutes sortes de choses. Mais Firefox est la seule chose qui m'arrive.
tomsmeding
2
Firefox s'arrêtera la prochaine fois que vous ouvrirez un onglet et vous indiquera qu'il doit redémarrer. D'autres applications peuvent faire quelque chose de différent.
Michael Hampton

Réponses:

40

Vous devez penser à Windows. Unix l'a fait correctement, puis plus tard, Windows est arrivé et a développé de mauvaises façons de faire les choses.

Sous Windows, le remplacement d'un fichier en cours d'utilisation par un processus en cours d'exécution peut gravement affecter ce processus. Le processus référencera les emplacements dans ce fichier et en obtiendra des informations incorrectes, généralement avec des résultats catastrophiques. C'est pourquoi une mise à jour Windows nécessite généralement un redémarrage pour s'assurer que tous les processus utilisent les versions correctes des bibliothèques, etc.

Avec Unix, une fois qu'un fichier a été ouvert par un processus, ce même fichier sera toujours disponible pour le processus même si le fichier d'origine est supprimé du système de fichiers .

Après une mise à jour, le système de fichiers contiendra une version différente du fichier et tous les processus qui démarrent après la mise à jour utiliseront ce nouveau fichier. Mais, contrairement à Windows, tous les anciens processus Unix continueront à utiliser les fichiers d'origine avec lesquels ils ont commencé. Même s'ils ne sont plus accessibles via le système de fichiers, ces fichiers persisteront tant que n'importe quel processus les utilisera. Finalement, quand aucun processus n'utilise les fichiers, l'ancienne version des fichiers sera finalement supprimée.

Vous pouvez bien sûr décider de redémarrer Firefox (ou d'autres processus) si vous souhaitez bénéficier immédiatement des avantages de la mise à jour. Le choix t'appartient.

Ray Butterworth
la source
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Thomas Ward
18

En règle générale, la mise à jour d'un programme alors qu'il est déjà ouvert ne pose aucun problème - comme l'ont expliqué les autres répondeurs, un processus en cours peut continuer à s'exécuter même si son exécutable est supprimé.

Cependant, en raison du modèle multi-processus de Firefox, vous pouvez malgré tout être invité à le redémarrer après une mise à jour. En effet, Firefox génère de nouveaux processus pour isoler différents sites Web, donc s'il génère un nouveau processus après l'avoir mis à jour mais avant de redémarrer Firefox, le nouveau processus sera une version de Firefox plus récente que le reste du navigateur. Cela peut entraîner divers problèmes, donc Firefox peut vous inviter à le redémarrer avant de vous permettre de continuer.

Soit dit en passant, Chrome évite cela en utilisant un processus "zygote" qui s'assoit sans rien faire; lorsque le navigateur doit générer un nouveau processus, au lieu de demander au système d'exploitation d'exécuter à nouveau l'exécutable du navigateur (qui exécuterait le binaire éventuellement mis à jour), il demande au processus zygote de se dupliquer, et l'une des copies devient alors un rendu normal processus.

Josh
la source
1
De plus, avec une application complexe comme Firefox, tout ce dont il pourrait avoir besoin pour faire face à tout ce qu'il rencontre n'est pas chargé en mémoire lors du lancement du programme. Ainsi, les composants qui sont chargés selon les besoins peuvent également créer une incompatibilité de versions. J'ai souvent fait bloquer Firefox lors de sa mise à jour pendant son exécution.
fixer1234
Ce ne sont pas seulement les navigateurs avec des modèles multi-processus, mais toute situation où les bibliothèques sont utilisées pour IPC et les bibliothèques peuvent être chargées avant et après la mise à jour - bien que les navigateurs soient probablement l'exemple le plus connu de ces jours-ci (COM interop sur Windows étant assez répandue signifie que beaucoup plus de programmes peuvent implicitement faire quelque chose comme ça cependant). Je ne peux pas non plus imaginer que Chrome évite complètement ce problème avec le processus zygote - charge-t-il vraiment chaque bibliothèque dont il pourrait avoir besoin à tout moment au démarrage?
Voo
@Voo demande "est-ce qu'il charge vraiment chaque bibliothèque dont il pourrait avoir besoin à tout moment au démarrage?". Je ne connais pas cet exemple spécifique, mais en général il n'est pas nécessaire. Tout ce qui est nécessaire est de s'assurer que chaque bibliothèque possible est ouverte au démarrage, garantissant ainsi que les données correctes seront lues en cas de besoin. L'ouverture d'un fichier (ou des dizaines de fichiers) est une dépense triviale par rapport au chargement de tout ce qu'ils contiennent.
Ray Butterworth
@Ray Fun fact: dlopen ne prend qu'un nom de fichier mais pas des descripteurs de fichier, ce qui pourrait ne pas être aussi simple que vous le pensiez (vous pouvez jouer avec / proc mais c'est notoirement différent le long des * nixes). Mais le plus gros problème est que cela éliminerait la plupart des cas d'utilisation où le chargement dynamique est utilisé pour commencer.
Voo
@Voo, désolé, je pensais à tort que ce commentaire était dans le thread orienté Unix, pas sur Windows et les DLL.
Ray Butterworth