Warum ist nur bei einigen Updates ein Neustart erforderlich?

18

Warum erfordert Ubuntu keinen Neustart für weitere Updates? Ich weiß, dass bei Kernel-Updates und Dingen wie Grafiktreibern die Änderungen nicht ohne Neustart geladen werden können. Aber ich bin neugierig auf grundlegendere Updates von ziemlich grundlegenden Paketen, die oft keinen Neustart erfordern. Dinge wie Telepathy, glibc, gtk usw. Warum erfordern solche Pakete keinen Neustart, um aktualisiert zu werden? Läuft die neue Version tatsächlich direkt nach einem Update?

Ein anderes Beispiel wäre Gwibber. Ich habe kürzlich ein Update von gwibber über den Update Manager erhalten, während gwibber ausgeführt wurde. Das Update wurde erfolgreich abgeschlossen. Würde gwibber die neue Version ausführen, ohne sie manuell neu zu starten? Und ist das bei anderen Paketen auch so? (Ich weiß, einige wie MySQL und Apache automatisch bei einem Update neu starten). Kann dies bei Paketen, die nicht automatisch neu gestartet werden, nicht zu einem Sicherheitsproblem für Sicherheitsupdates werden?

Dies ist darauf zurückzuführen, dass ich seit ungefähr einer Woche mit OS X arbeite und fast jedes Update einen Neustart erfordert, auch wenn es nicht mit dem Kernel / Videotreiber zusammenhängt (soweit ich das beurteilen kann - sie geben Ihnen nicht viele Informationen) ). Ein Freund von mir sagte, dass Apple bei den meisten Updates einen Neustart erzwingt, "nur für den Fall", dass Sie nicht neu starten würden. Windows ist das Schlimmste, da für fast jede Installation / Deinstallation oder Aktualisierung ein Neustart erforderlich ist (was häufig dazu führt, dass das Herunterfahren sehr lange dauert). Das mag für diesen Veranstaltungsort etwas weit gefasst sein, aber warum gehen die verschiedenen Betriebssysteme so unterschiedlich damit um? Oder Ubuntu-spezifischer: Warum befolgt Ubuntu keine strengeren Neustartrichtlinien?

gregghz
quelle

Antworten:

23

Wann immer Sie eine Datei in Windows öffnen oder ausführen, sperrt Windows die Datei an ihrem Platz (dies ist eine Vereinfachung, aber in der Regel wahr). Möglicherweise sind diese lästigen Fehler aufgetreten, bei denen Sie eine Datei nicht löschen können, weil ein anderer Prozess eine exklusive Sperre aufweist es. Aus diesem Grund müssen Sie jedes Mal, wenn Windows sich selbst aktualisieren muss, einen Neustart durchführen, damit die Aktualisierung wirksam wird. Windows reiht die Aktivitäten zum Ersetzen und Löschen von Dateien beim nächsten Start in eine Warteschlange ein (wenn nichts gesperrt ist).

Andererseits hat Linux einen Mechanismus, bei dem nicht die Datei gesperrt ist, sondern die zugrunde liegenden Daten auf der Festplatte. Dies mag trivial erscheinen, bedeutet aber, dass der Datensatz der Datei im Inhaltsverzeichnis des Dateisystems gelöscht werden kann, ohne ein Programm zu stören, in dem die Datei bereits geöffnet ist. So können Sie eine Datei löschen, während sie noch ausgeführt oder anderweitig verwendet wird, und sie bleibt auf der Festplatte bestehen, solange ein Prozess ein offenes Handle dafür hat, obwohl der Eintrag in der Dateitabelle weg ist. Auf diese Weise kann Linux ein Programm vollständig ersetzen, während es noch ausgeführt wird, und dann einfach das Programm neu starten oder einfach warten, bis der Prozess auf natürliche Weise beendet wird. Sobald die alte Instanz getötet ist,

Solange also eine bestimmte Datei in irgendeiner Weise nicht speziell ist (wie zum Beispiel die Kernel-Image-Datei oder Dateien, die zu ähnlich untergeordneten Systemen gehören), kann der Updater in der Regel eine solche Aktualisierung durchführen. Ich bin sicher, es gibt spezielle Fälle und Situationen, in denen dies keine gute Idee wäre, aber in den meisten Fällen ist es in Ordnung.

Was den Grund für OS X angeht, so klingt diese "nur für den Fall" -Theorie plausibel.

Andrew Lambert
quelle
1
Um Amazeds Standpunkt zu demonstrieren, erstellen Sie eine test.py-Datei: #!/usr/bin/env python print raw_input()Führen Sie diese mit python test.pyoder chmod +x test.py && ./test.pyund aus, wenn Sie zur Eingabe aufgefordert werden rm test.py.
Raylu
Der Grund dafür, dass die meisten Benutzerprogramme nicht automatisch neu gestartet werden, ist, dass sie eine sehr kurze Lebensdauer haben und praktisch keine Rechte haben, das System zu ändern. Wenn Sie sich Sorgen machen, können Sie sich einfach abmelden und wieder anmelden. Dadurch werden alle geöffneten Programme geschlossen.
LassePoulsen
2
Insbesondere installiert dpkg Dateien, indem es sie in foo.dpkg-new schreibt und sie dann über jeder vorherigen Datei umbenennt, die sich dort befand, was ein reibungsloses direktes Upgraden von Bibliotheken und ausführbaren Dateien ermöglicht.
Colin Watson