[beantwortet] Was ich immer schon mal wissen wollte ...

Smalltalk
Antworten
TuxPeter
Beiträge: 1966
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

[beantwortet] Was ich immer schon mal wissen wollte ...

Beitrag von TuxPeter » 31.05.2017 09:50:32

... aber mich nie zu fragen traute:

Was passiert eigentlich mit aktuell laufenden Programmen beim Upgrade?

Ich meine, beim Kernel ist es mir klar, der muss neu gebootet werden. Und viele Prozesse werden automatisch angehalten und neu gestartet, bei manchen gibt es Nachfragen. Auch Programme, die komplett im RAM stehen, können unbeschadet upgedatet werden, dann wird eben beim nächsten Programmstart eben die neue Version geladen.

Aber was ist mit den vielen Programmen, die dynamisch mit irgendwelchen Libs verlinkt sind bzw die in verschiedenen Libs aufgeteilt sind? Denen müsste ja nach einem Upgrade plötzlich eine neue Lib untergeschoben werden? Und das kann doch nicht immer gut gehen, gibt ja dann einen "wilden" Versions-Mischmasch? Oder es könnten die Schnittstellen zwischen der neuen Lib und den aufrufenden Progs nie geändert werden?
Zuletzt geändert von TuxPeter am 31.05.2017 10:16:19, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10776
Registriert: 25.09.2007 19:59:30

Re: Was ich immer schon mal wissen wollte ...

Beitrag von MSfree » 31.05.2017 10:09:36

TuxPeter hat geschrieben:Denen müsste ja nach einem Upgrade plötzlich eine neue Lib untergeschoben werden?
Solange das betroffene Programm läuft, ist noch die alte Lib im RAM und wird bis zum Programmende verwendet. Wenn du das Programm neu startest, wird es tatsächlich gegen die neue Lib gelinkt und startet mit dieser.

Technisch ist das recht einfach gelöst. Der Updateprozeß löscht die alte Lib. Da sie aber noch in Benutzung von laufenden Programmen ist, bleibt der Speicherplatz auf der Platte gelockt und kann nicht überschrieben werden. Die neue Lib wird also auf "frischen" Platz auf der Platte geschrieben. Erst, wenn das letzte Programm, das noch auf die alte Lib zugreift, beendet wird, wird auch der Lock auf den Speicherplatz entfernt und der Plattenplatz kann für andere Daten wiederbenutzt werden.

TuxPeter
Beiträge: 1966
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Re: [beantwortet] Was ich immer schon mal wissen wollte ...

Beitrag von TuxPeter » 31.05.2017 10:19:20

Vielen Dank für die prompte und gut erklärte Antwort!
Ist genau das, was ich wissen wollte.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [beantwortet] Was ich immer schon mal wissen wollte ...

Beitrag von rendegast » 31.05.2017 12:32:56

Dienste werden meist mit ihrem postinst-Skript resp. vom Paketsystem neu gestartet,
meist.

Um zu prüfen
'checkrestart [-v]' (Debiandebian-goodies)
'needrestart [-b]' (Debianneedrestart)

lsof | grep delet
# die Grundlage der obigen, aber nicht so praktikabel,
# zBsp. finden sich auch Auslagerungen von qemu-VM im snapshot-Modus.

needrestart ist die moderne Version von checkrestart, verbunden mit der Neustartaktion.
Ich traue dem needrestart noch nicht so richtig.

Bei checkrestart werden Aktionen vorgeschlagen, (klassisch) 'service blabla restart',
genauso needrestart im interaktiven Modus
(needrestart bietet zur Konfiguration eine blacklist).
Es sollte überlegt werden, was ausgeführt wird, um sich nicht selbst die Füße wegzuziehen,
zBsp. display-manager oder xrdp -> Xserver.

Weiterhin kann root zBsp. nicht das panel einer Benutzer-X-Session neu starten.
(Genau bei solchen Prozessen hapert es bei needrestart, sie werden nicht angezeigt.)
Aber ich glaube mal gelesen zu haben, daß ein Prozeß per 'kill' angewiesen werden kann, seine libs neu einzulesen(?)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten