¿Por qué el terminal puede desinstalarse?

25

captura de pantalla

¿Cómo apt-get remove xtermpasa? Y después de que se haya desinstalado, xtermno se cierra y continúa funcionando normalmente.

¿El xtermproceso se almacena en caché en la RAM mientras se está ejecutando?

Huey
fuente
66
Para ser exactos, no se está desinstalando realmente, se apt-getestá desinstalando xtermy no tiene idea de que de alguna manera depende de un xtermproceso, por lo que se trata de "¿Por qué se puede desinstalar xterm mientras se ejecuta?". Buena pregunta.
Volker Siegel
2
Es similar a cómo puede eliminar el disco duro mientras ejecuta el sistema operativo.
jkd

Respuestas:

53

No exactamente. El archivo ya está abierto por el programa. Eliminar el archivo (y luego reemplazarlo con otra versión) no afecta el programa en ejecución porque el archivo original se mantiene abierto (aunque sin un nombre en el disco para abrirlo nuevamente) hasta que el programa haya terminado con él. Solo cuando todos los identificadores del archivo están cerrados, se liberan sus bloques de datos en el disco. Hasta entonces, el archivo abierto se puede leer y escribir de la manera habitual: el único cambio es que nadie más puede abrirlo ya que se ha eliminado su nombre.

Si bien es posible que algunas partes del programa ya hayan sido leídas en la memoria RAM cuando se eliminan, aún pueden descartarse y volverse a leer más tarde, o partes nuevas del programa que no se habían ejecutado previamente aún se pueden cargar desde el archivo eliminado.

psusi
fuente
44
Esta es la razón real ... esta es también la razón por la que rm -rf /funciona .....
heemayl
66
Si quieres usar la palabra "funciona" para describir con éxito atornillar todo totalmente. ;) Curiosamente, rm -rf /no funcionará si intentas ejecutarlo por segunda vez inmediatamente después;)
thomasrutter
1
A menudo he visto "/ some / file / name (eliminado)" en la lsofsalida, y sé que así es como se ve un archivo 'zombie' ... pero ¿hay alguna forma de salvar el contenido de dicho archivo? cuando muere el último identificador de archivo?
Kilian Foth
1
@KilianFoth, si puede encontrar un proceso que todavía tenga el archivo abierto, puede copiarlo desde / proc / $ PID / fd / $ ID a otro archivo, pero parece que no puedo encontrar una manera de recuperar el archivo en su lugar ya que todos los intentos de vincular el archivo fallan
psusi
3
@KilianFoth Si hay un identificador de archivo, es rootposible que pueda crear un nombre para él (y así evitar la eliminación) mediante la linkatllamada al sistema. Pero los archivos ejecutables y las bibliotecas están mapeados en memoria, lo que no requiere un identificador de archivo. No conozco ninguna forma de obtener un identificador en un archivo que solo existe porque está mapeado en memoria. Aunque se puede acceder a los ejecutables /procmientras se están ejecutando, por lo que solo las bibliotecas y otros archivos de memoria asignados pueden estar más allá de la recuperación. Si desea obtener más detalles al respecto, debe hacer una pregunta por separado.
kasperd
8

¿El xtermproceso se almacena en caché en la RAM mientras se está ejecutando?

Exactamente. Es similar al proceso que le permite instalar actualizaciones de cosas mientras se ejecutan sin que se bloqueen. Y también por qué tiene que reiniciar los servicios después de actualizarlos. Una vez que algo se está ejecutando, su binario está en la memoria.

Si depende de otros archivos (que no están en un estado "abierto" retenido) que se eliminan o reemplazan, eso puede causar problemas, pero por algo tan discreto como xterm, eso no es un problema.

Oli
fuente
66
No del todo ... partes del programa se leen en la memoria solo cuando es necesario, y pueden descartarse en cualquier momento para liberar memoria para otros usos, por lo que será necesario volver a leerlo más tarde (cuando el programa intente acceder a esas partes otra vez ).
psusi
17
No es necesariamente en RAM. Pero los archivos no se eliminan hasta que no se abren, incluido el ejecutable xterm.
user253751
@immibis, de ahí mi respuesta;)
psusi
2

De hecho, es una característica de cómo funcionan las computadoras: cuando se invoca un programa, de hecho se carga en la memoria y funciona desde allí.

Un archivo realmente funciona de la misma manera. Para evitar problemas, muchos archivos en sistemas UNIX-ish crean bloqueos.

El acertijo real es por qué no puedes hacer tales y otras cosas similares en Windows.

Esta característica es en realidad lo que le permite actualizar todo el sistema, incluidos los programas que están activos en su sistema. ;)

runlevel0
fuente
+1 para "la inactividad real es la razón por la que no se pueden hacer cosas similares en Windows"
arielf