... 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?
[beantwortet] Was ich immer schon mal wissen wollte ...
[beantwortet] Was ich immer schon mal wissen wollte ...
Zuletzt geändert von TuxPeter am 31.05.2017 10:16:19, insgesamt 1-mal geändert.
Re: Was ich immer schon mal wissen wollte ...
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.TuxPeter hat geschrieben:Denen müsste ja nach einem Upgrade plötzlich eine neue Lib untergeschoben werden?
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.
Re: [beantwortet] Was ich immer schon mal wissen wollte ...
Vielen Dank für die prompte und gut erklärte Antwort!
Ist genau das, was ich wissen wollte.
Ist genau das, was ich wissen wollte.
Re: [beantwortet] Was ich immer schon mal wissen wollte ...
Dienste werden meist mit ihrem postinst-Skript resp. vom Paketsystem neu gestartet,
meist.
Um zu prüfen
'checkrestart [-v]' (debian-goodies)
'needrestart [-b]' (needrestart)
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(?)
meist.
Um zu prüfen
'checkrestart [-v]' (debian-goodies)
'needrestart [-b]' (needrestart)
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")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")