Perché il riavvio è richiesto solo su alcuni aggiornamenti?


18

Perché Ubuntu non richiede il riavvio di altri aggiornamenti? So che per gli aggiornamenti del kernel e cose come i driver video, non è possibile caricare le modifiche senza un riavvio. Ma sono curioso di conoscere altri aggiornamenti di base di pacchetti piuttosto fondamentali che spesso non richiedono riavvii. Cose come Telepathy, glibc, gtk, ecc. Perché i pacchetti come questo non richiedono un riavvio per essere aggiornati? La nuova versione è effettivamente in esecuzione subito dopo un aggiornamento?

Un altro esempio sarebbe Gwibber. Di recente ho ricevuto e aggiornato gwibber tramite Update Manager mentre gwibber era in esecuzione. L'aggiornamento è stato completato correttamente. Gwibber eseguirà la nuova versione senza riavviarla manualmente? E lo stesso vale per altri pacchetti? (Conosco alcuni come mysql e apache che si riavvia automaticamente su un aggiornamento). Per i pacchetti che non si riavvia automaticamente, non può essere un problema di sicurezza per la correzione di sicurezza?

Ciò si verifica perché utilizzo OS X da circa una settimana e quasi tutti gli aggiornamenti richiedono un riavvio anche se non sono correlati al driver kernel / video (per quanto ne so, non forniscono molte informazioni ). Un mio amico ha detto che le forze di Apple si riavvia sulla maggior parte degli aggiornamenti "per ogni evenienza" sarebbe strano se non si riavviasse. Windows è il peggiore perché quasi ogni installazione / disinstallazione o aggiornamento richiede un riavvio (spesso costringendo gli arresti a impiegare molto tempo). Questo potrebbe essere un po 'ampio per questa sede, ma perché i diversi sistemi operativi lo gestiscono in modo così diverso? Oppure, più specifico per Ubuntu: perché Ubuntu non segue una politica di riavvio più rigorosa?

Risposte:


23

Ogni volta che apri o esegui un file in Windows, Windows blocca il file in posizione (questa è una semplificazione, ma di solito vera.) Potresti aver riscontrato quegli fastidiosi errori in cui non puoi eliminare un file perché un altro processo ha un blocco esclusivo attivato esso. Questo è il motivo per cui ogni volta che Windows deve aggiornarsi è necessario un riavvio affinché abbia effetto. Windows metterà in coda le attività di sostituzione e cancellazione dei file per il prossimo avvio (quando nulla ha un blocco su qualcosa).

D'altra parte, Linux ha un meccanismo in cui non è il file che è bloccato, ma i dati sottostanti sul disco che è. Ciò può sembrare una banale differenziazione, ma significa che il record del file nel sommario del filesystem può essere eliminato senza disturbare nessun programma che abbia già il file aperto. Quindi è possibile eliminare un file mentre è ancora in esecuzione o comunque in uso e continuerà a esistere sul disco fino a quando alcuni processi hanno un handle aperto per esso anche se la sua voce nella tabella dei file è sparita. Ciò consente a Linux di sostituire completamente un programma mentre è ancora in esecuzione e quindi semplicemente riavviare il programma o semplicemente attendere che il processo termini naturalmente. Una volta che la vecchia istanza viene uccisa,

Quindi, fintanto che un determinato file non è in qualche modo speciale (come, ad esempio, il file immagine del kernel o file appartenenti a sistemi di basso livello simili) il programma di aggiornamento può di solito aggiornarsi sul posto in questo modo. Sono sicuro che ci sono casi speciali e situazioni in cui questa non sarebbe una buona idea, ma nella maggior parte dei casi va bene.

Per quanto riguarda il motivo per cui OS X lo fa, quella teoria "per ogni evenienza" sembra plausibile.


1
Per dimostrare il punto di Stupito, creare un file test.py: #!/usr/bin/env python print raw_input()Eseguire questo con python test.pyo chmod +x test.py && ./test.pye, quando viene richiesto per l'input, rm test.py.
raylu,

La ragione per cui la maggior parte dei programmi utente non viene riavviata automaticamente è che si pensa che abbiano una durata molto breve e che non abbiano praticamente alcun privilegio per cambiare il sistema. Se sei preoccupato, puoi semplicemente disconnetterti e poi riconnetterti, questo chiuderà tutti i programmi che hai aperto.
LassePoulsen,

2
In particolare, dpkg installa i file scrivendoli su foo.dpkg-new e quindi rinominandoli sopra qualsiasi file precedente che era lì, il che consente aggiornamenti sul posto senza problemi di librerie ed eseguibili.
Colin Watson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.