Perché il terminale può disinstallarsi?


25

immagine dello schermo

Come apt-get remove xtermva? E dopo che è stato disinstallato, xtermnon si chiude e continua a funzionare normalmente.

Il xtermprocesso è memorizzato nella cache mentre è in esecuzione?


6
Per essere precisi, non si sta realmente disinstallando da solo - apt-getsta disinstallando xterme non ha idea che in qualche modo dipenda da un xtermprocesso - quindi si tratta di "Perché è possibile disinstallare xterm durante l'esecuzione?". Bella domanda
Volker Siegel,

2
È simile a come è possibile eliminare il disco rigido durante l'esecuzione del sistema operativo.
jkd,

Risposte:


53

Non proprio. Il file è già aperto dal programma. L'eliminazione del file (e quindi la sua sostituzione con un'altra versione) non influisce sul programma in esecuzione poiché il file originale viene tenuto aperto (anche se senza un nome sul disco per aprirlo di nuovo) fino a quando il programma non ha terminato. Solo quando tutti gli handle del file sono chiusi vengono rilasciati i suoi blocchi di dati sul disco. Fino ad allora il file aperto può essere letto e scritto come al solito - l'unica modifica è che nessun altro può aprirlo poiché il suo nome è stato rimosso.

Mentre parti del programma potrebbero essere già state lette in ram quando viene eliminato, potrebbero comunque essere scartate e rilette in seguito, oppure nuove parti del programma che non erano state eseguite in precedenza possono ancora essere caricate dal file eliminato.


4
Questo è il vero motivo .... questo è anche il motivo per cui rm -rf /funziona .....
heemayl

6
Se vuoi usare la parola "funziona" per descrivere con successo tutto rovinato. ;) È interessante notare rm -rf /che non funzionerà se si tenta di eseguirlo una seconda volta immediatamente dopo;)
thomasrutter

1
Ho spesso visto "/ some / file / name (cancellato)" in lsofoutput, e so che è come appare un file 'zombie' ... ma c'è un modo per salvare il contenuto di un tale file dalla scomparsa quando muore l'ultimo handle di file?
Kilian Foth,

1
@KilianFoth, se riesci a trovare un processo che ha ancora il file aperto, puoi copiarlo da / proc / $ PID / fd / $ ID in un altro file, ma non riesco a trovare un modo per recuperare il file in atto poiché tutti i tentativi di hard linking del file falliscono.
psusi,

3
@KilianFoth Se esiste un handle di file, rootpotrebbe essere in grado di creare un nome per esso (e quindi impedire l'eliminazione) utilizzando la linkatchiamata di sistema. Ma gli eseguibili e le librerie sono mappati in memoria, il che non richiede un handle di file. Non conosco alcun modo per ottenere un handle su un file che esiste solo perché è mappato in memoria. Sebbene sia possibile accedere agli eseguibili /procmentre sono in esecuzione, quindi sono solo le librerie e altri file mappati in memoria che potrebbero essere irreparabili. Se vuoi maggiori dettagli a riguardo, dovresti porlo come domanda separata.
Kasperd,

8

Il xtermprocesso è memorizzato nella cache mentre è in esecuzione?

Esattamente. È simile al processo che ti consente di installare aggiornamenti sulle cose mentre sono in esecuzione senza che si blocchino. E anche perché devi riavviare i servizi dopo averli aggiornati. Una volta che qualcosa è in esecuzione, il suo binario è in memoria.

Se dipende da altri file (che non sono in uno stato "aperto" bloccato) che vengono rimossi o sostituiti, ciò potrebbe causare problemi ma per qualcosa di così discreto xterm, che non è un problema.


6
Non del tutto .. parti del programma vengono lette in memoria solo quando necessario e possono essere scartate in qualsiasi momento per liberare memoria per altri usi, e quindi dovranno essere lette nuovamente in seguito (quando il programma tenta di accedere a quelle parti ancora ).
psusi,

17
Non è necessariamente nella RAM. Ma i file non vengono effettivamente eliminati fino a quando non sono aperti, incluso l'eseguibile xterm.
user253751

@immibis, quindi, la mia risposta;)
psusi,

2

È infatti una caratteristica di come funzionano i computer: quando un programma viene invocato, viene effettivamente caricato nella memoria e funziona da lì.

Un file funziona effettivamente allo stesso modo. Per evitare problemi, molti file nei sistemi ISIX creano blocchi.

Il vero indovinello è il motivo per cui non puoi fare cose così e simili in Windows.

Questa funzione è in realtà ciò che ti consente di aggiornare l'intero sistema, compresi i programmi attivi nel tuo sistema. ;)


+1 per "il minimo reale è il motivo per cui non puoi fare cose così e simili in Windows"
arielf
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.