Cosa succede se lascio accidentalmente un'app in esecuzione e faccio clic su "Installa ora" in Software Updater?


22

Il Software Updater si update-managerapre e mostra gli aggiornamenti di sicurezza per Firefox, ad esempio. Naturalmente, farò clic su "Installa ora" per continuare.

Tuttavia, cosa succede se ho ancora Firefox in esecuzione quando lo faccio? Aggiornerà ancora Firefox? L'aggiornamento verrà ignorato e verrà visualizzato di nuovo la prossima volta? L'aggiornamento forzerà la chiusura di Firefox e forse l'arresto anomalo? Aggiornerà solo parzialmente il software e potrebbe interrompere la mia installazione di Firefox?


10
Non succede nulla, Firefox è aperto in Ram. A volte rileva l'aggiornamento e ti dice di riavviare il browser. Ma forse qualcuno con più intuizioni e riferimenti può dare una risposta migliore.
pLumo

3
Non conosco specificamente Ubuntu, ma su Arch (e non penso che sia così diverso in questo caso), l'aggiornamento di Firefox sotto i suoi piedi mentre corri sembra funzionare, ma poi la prima cosa che fai in Firefox si blocca cosa. L'ho sempre attribuito alla complessa natura dei browser moderni, caricando runtime tutti i tipi di cose. Ma Firefox è l'unica cosa che succede con me.
tomsmeding

2
Firefox si interromperà alla successiva apertura di una scheda e ti dirà che è necessario riavviare. Altre app potrebbero fare qualcosa di diverso.
Michael Hampton,

Risposte:


40

Devi pensare a Windows. Unix ha fatto bene, e poi Windows è arrivato e ha sviluppato modi sbagliati di fare le cose.

Con Windows, la sostituzione di un file utilizzato da un processo in esecuzione può influire negativamente su tale processo. Il processo farà riferimento a posizioni all'interno di quel file e otterrà informazioni errate da esso, di solito con risultati catastrofici. Ecco perché un aggiornamento di Windows richiede generalmente un riavvio per garantire che tutti i processi utilizzino le versioni corrette delle librerie, ecc.

Con Unix, una volta che un file è stato aperto da un processo, lo stesso file sarà sempre disponibile per il processo anche se il file originale viene rimosso dal filesystem .

Dopo un aggiornamento, il filesystem conterrà una versione diversa del file e tutto il processo che inizia dopo l'aggiornamento utilizzerà quel nuovo file. Ma, a differenza di Windows, tutti i vecchi processi Unix continueranno a utilizzare i file originali con cui sono stati avviati. Anche se non sono più accessibili tramite il filesystem, quei file persisteranno fintanto che qualsiasi processo li sta usando. Alla fine, quando nessun processo utilizza i file, la vecchia versione dei file verrà infine eliminata.

Puoi ovviamente decidere di riavviare Firefox (o altri processi) se desideri ottenere subito i vantaggi dell'aggiornamento. La scelta è tua.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Thomas Ward

18

In genere, l'aggiornamento di un programma mentre è già aperto non è un problema - come hanno spiegato gli altri risponditori, un processo in esecuzione può continuare a essere eseguito anche se il suo eseguibile viene eliminato.

Tuttavia, a causa del modello multi-processo di Firefox, è possibile che venga richiesto di riavviarlo dopo un aggiornamento. Questo perché Firefox genera nuovi processi per isolare diversi siti Web, quindi se genera un nuovo processo dopo averlo aggiornato ma prima di riavviare Firefox, il nuovo processo sarà una versione più recente di Firefox rispetto al resto del browser. Ciò può causare vari problemi, quindi Firefox potrebbe richiedere di riavviarlo prima di consentirti di continuare.

Per inciso, Chrome lo evita usando un processo "zigote" che rimane in giro senza fare nulla; quando il browser deve generare un nuovo processo, invece di chiedere al sistema operativo di eseguire nuovamente il file eseguibile del browser (che eseguirà il binario eventualmente aggiornato), chiede al processo zygote di duplicarsi, e una delle copie diventa un normale renderer processi.


1
Inoltre, con un'applicazione complessa come Firefox, tutto ciò di cui potrebbe aver bisogno per gestire tutto ciò che incontra non viene caricato in memoria all'avvio del programma. Pertanto, i componenti che vengono caricati in base alle esigenze possono allo stesso modo creare una discrepanza di versioni. Ho spesso avuto Firefox bloccato durante l'aggiornamento mentre era in esecuzione.
fixer1234

Non si tratta solo di browser con modelli multi-processo, ma di qualsiasi situazione in cui le librerie vengono utilizzate per IPC e le librerie possono essere caricate prima e dopo l'aggiornamento, anche se i browser sono probabilmente l'esempio più noto di questo in questi giorni (l'interoperabilità COM su Windows è abbastanza diffuso significa che molti più programmi possono fare implicitamente qualcosa del genere). Inoltre, non riesco a immaginare che Chrome eviti completamente questo problema con il processo zygote: carica davvero ogni singola libreria di cui potrebbe aver bisogno in qualsiasi momento all'avvio?
Voo

@Voo chiede "carica davvero ogni singola libreria di cui potrebbe aver bisogno in qualsiasi momento all'avvio?". Non conosco questo esempio specifico, ma in generale non è necessario. Tutto ciò che serve è garantire che ogni possibile libreria venga aperta all'avvio, garantendo in tal modo che i dati corretti verranno letti in caso di necessità. Aprire un file (o dozzine di file) è una spesa banale rispetto al caricamento di tutto ciò che contengono.
Ray Butterworth,

@Ray Fun fact: dlopen prende solo un nome file ma non descrittori di file, quindi potrebbe non essere così semplice come pensavi (puoi giocare con / proc ma è notoriamente diverso lungo i * nix). Ma il problema più grande è che ciò eliminerebbe la maggior parte dei casi di utilizzo in cui per iniziare viene utilizzato il caricamento dinamico.
Voo

@Voo, scusa, ho erroneamente pensato che questo commento fosse nel thread unix-oriented, non su Windows e DLL.
Ray Butterworth
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.