¿Por qué un paquete de software funciona bien incluso cuando se actualiza?

¿Por qué un paquete de software funciona bien incluso cuando se actualiza?

Digamos que estoy ejecutando un software y luego ejecuto el administrador de paquetes para actualizar el software, noto que Linux no detiene el proceso en ejecución para la actualización del paquete; todavía funciona bien. ¿Cómo hace Linux esto?

Respuesta1

La razón es que Unix no bloquea un archivo ejecutable mientras se ejecuta o incluso si le gusta Linux, este bloqueo se aplica al inodo, no al nombre del archivo. Eso significa que un proceso que lo mantiene abierto accede a los mismos datos (antiguos) incluso después de que el archivo haya sido eliminado (desvinculado en realidad) y reemplazado por uno nuevo con el mismo nombre, que es esencialmente lo que hace una actualización de paquete.

Esa es una de las principales diferencias entre Unix y Windows. Este último no puede actualizar un archivo bloqueado porque le falta una capa entre los nombres de los archivos y los inodos, lo que dificulta mucho la actualización o incluso la instalación de algunos paquetes, ya que generalmente requiere un reinicio completo.

Respuesta2

Los ejecutables generalmente se abren una vez, se adjuntan a un descriptor de archivo y no tienen un descriptor de archivo en su binario reabierto durante un solo período de ejecución. Por ejemplo, si ejecuta bash, exec()generalmente solo crea un descriptor de archivo para el inodo al que apunta /bin/bashuna vez, al invocarlo.

Esto a menudo significa que para los binarios simples que no intentan volver a leerse durante la ejecución (utilizando la ruta por la que fueron invocados), el contenido almacenado en caché sigue siendo válido como un inodo colgante. Esto significa que esencialmente hay una réplica de la versión anterior del ejecutable.

En casos más complejos, esto puede causar problemas. Por ejemplo, un archivo de configuración puede actualizarse y posteriormente volverse a leer, o el programa puede volver a ejecutarse a través de la ruta desde la que se ejecutó. También puede haber problemas si los programas están interconectados y uno se ejecuta antes de la actualización y el otro después (posiblemente por el primer programa). Esto también es válido para algunas bibliotecas.

Sin embargo, para casos de uso simples, es seguro actualizar sin reiniciar el proceso.

información relacionada