Was passiert, wenn ich versehentlich eine App laufen lasse und im Software Updater auf "Jetzt installieren" klicke?

22

Der Software Updater wird update-managergeöffnet und zeigt beispielsweise Sicherheitsupdates für Firefox an. Natürlich klicke ich auf "Jetzt installieren", um fortzufahren.

Was passiert jedoch, wenn Firefox bei dieser Aktion noch ausgeführt wird? Wird Firefox weiterhin aktualisiert? Wird das Update übersprungen und beim nächsten Mal wieder angezeigt? Erzwingt das Update, dass Firefox geschlossen wird und möglicherweise abstürzt? Wird die Software nur teilweise aktualisiert und möglicherweise meine Firefox-Installation unterbrochen?

Feinfuss
quelle
10
Nichts passiert, Firefox ist in Ram geöffnet. Manchmal erkennt es das Update und fordert Sie auf, den Browser neu zu starten. Aber vielleicht kann jemand mit mehr Einsicht und Referenzen eine bessere Antwort geben.
pLumo
3
Ich weiß nicht genau, was Ubuntu angeht, aber auf Arch (und ich glaube nicht, dass es in diesem Fall anders ist) scheint das Aktualisieren von Firefox unter den Füßen während des Laufens zu funktionieren, aber dann stürzt das erste, was Sie in Firefox tun, ab Sache. Ich habe das immer nur der Komplexität moderner Browser zugeschrieben, die alle möglichen Dinge zur Laufzeit laden. Aber Firefox ist das Einzige, was mir passiert.
Tomsmeding
2
Firefox stoppt, wenn Sie das nächste Mal einen Tab öffnen, und weist Sie darauf hin, dass ein Neustart erforderlich ist. Andere Apps können etwas anderes machen.
Michael Hampton

Antworten:

40

Sie müssen an Windows denken. Unix hat es richtig gemacht, und später kam Windows und entwickelte falsche Methoden.

Unter Windows kann das Ersetzen einer Datei, die von einem ausgeführten Prozess verwendet wird, diesen Prozess beeinträchtigen. Der Prozess verweist auf Speicherorte in dieser Datei und erhält falsche Informationen daraus, in der Regel mit katastrophalen Ergebnissen. Aus diesem Grund erfordert ein Windows-Update im Allgemeinen einen Neustart, um sicherzustellen, dass alle Prozesse die richtigen Versionen von Bibliotheken usw. verwenden.

Unter Unix ist nach dem Öffnen einer Datei durch einen Prozess immer dieselbe Datei für den Prozess verfügbar, auch wenn die ursprüngliche Datei aus dem Dateisystem entfernt wurde .

Nach einem Update enthält das Dateisystem eine andere Version der Datei, und alle Prozesse, die nach dem Update gestartet werden, verwenden diese neue Datei. Im Gegensatz zu Windows werden in allen alten Unix-Prozessen weiterhin die ursprünglichen Dateien verwendet, mit denen sie begonnen haben. Auch wenn der Zugriff über das Dateisystem nicht mehr möglich ist, bleiben diese Dateien so lange bestehen, wie sie von einem Prozess verwendet werden. Wenn die Dateien nicht von Prozessen verwendet werden, wird die alte Version der Dateien endgültig gelöscht.

Sie können natürlich auch Firefox (oder andere Prozesse) neu starten, wenn Sie die Vorteile des Updates sofort nutzen möchten. Es ist deine Entscheidung.

Ray Butterworth
quelle
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Thomas Ward
18

In der Regel ist das Aktualisieren eines bereits geöffneten Programms kein Problem. Wie die anderen Antwortenden bereits erklärt haben, kann ein ausgeführter Prozess auch dann weiter ausgeführt werden, wenn die ausführbare Datei gelöscht wird.

Aufgrund des Multi-Prozess-Modells von Firefox erhalten Sie jedoch möglicherweise die Aufforderung, es nach einem Update trotzdem neu zu starten. Dies liegt daran, dass Firefox neue Prozesse erzeugt, um verschiedene Websites zu isolieren. Wenn also ein neuer Prozess erzeugt wird, nachdem Sie ihn aktualisiert haben, aber bevor Sie Firefox neu starten, ist der neue Prozess eine neuere Version von Firefox als der Rest des Browsers. Dies kann verschiedene Probleme verursachen. Firefox fordert Sie daher möglicherweise auf, den Computer neu zu starten, bevor Sie fortfahren können.

Im Übrigen vermeidet Chrome dies, indem es einen "zygote" -Prozess verwendet, der herumsteht und nichts tut. Wenn der Browser einen neuen Prozess erzeugen muss, fordert er das Betriebssystem nicht auf, die ausführbare Datei des Browsers erneut auszuführen (wodurch die möglicherweise aktualisierte Binärdatei ausgeführt wird), sondern fordert den Zygote-Prozess auf, sich selbst zu duplizieren, und eine der Kopien wird dann zu einem normalen Renderer verarbeiten.

Josh
quelle
1
Außerdem wird bei einer komplexen Anwendung wie Firefox beim Start des Programms nicht alles in den Arbeitsspeicher geladen, was möglicherweise für die Bearbeitung von Problemen erforderlich ist. Komponenten, die nach Bedarf geladen werden, können daher ebenfalls zu einer Nichtübereinstimmung der Versionen führen. Ich habe Firefox oft hängen lassen, wenn es aktualisiert wurde, während es lief.
Fixer1234
Es sind nicht nur Browser mit Multi-Prozess-Modellen, sondern jede Situation, in der Bibliotheken für IPC und die Bibliotheken verwendet werden, kann vor und nach dem Update geladen werden - obwohl Browser heutzutage wahrscheinlich das bekannteste Beispiel dafür sind (COM-Interop unter Windows) Ziemlich weit verbreitet bedeutet jedoch, dass viel mehr Programme implizit so etwas tun können. Ich kann mir auch nicht vorstellen, dass Chrome dieses Problem mit dem Zygote-Prozess vollständig vermeidet. Lädt es wirklich jede einzelne Bibliothek, die es zu irgendeinem Zeitpunkt beim Start benötigt?
Voo
@Voo fragt "Lädt es wirklich jede einzelne Bibliothek, die es zu irgendeinem Zeitpunkt beim Start benötigt?". Ich kenne dieses spezielle Beispiel nicht, aber im Allgemeinen ist es nicht notwendig. Es muss lediglich sichergestellt werden, dass jede mögliche Bibliothek beim Start geöffnet wird, um sicherzustellen, dass die richtigen Daten gelesen werden, falls sie jemals benötigt werden. Das Öffnen einer Datei (oder von Dutzenden von Dateien) ist im Vergleich zum Laden von allem, was sie enthalten, ein trivialer Aufwand.
Ray Butterworth
@ Ray Witzige Tatsache: dlopen verwendet nur einen Dateinamen, aber keine Dateideskriptoren, sodass dies möglicherweise nicht so einfach ist, wie Sie es sich vorgestellt haben (Sie können mit / proc herumspielen, aber das ist in den * Nixen notorisch anders). Das größere Problem ist jedoch, dass dadurch die meisten Anwendungsfälle beseitigt werden, in denen zunächst das dynamische Laden verwendet wird.
Voo
@Voo, sorry, ich dachte fälschlicherweise, dass dieser Kommentar im unix-orientierten Thread war, nicht über Windows und DLLs.
Ray Butterworth