¿Qué sucede si accidentalmente dejo una aplicación en ejecución y hago clic en "Instalar ahora" en el Actualizador de software?

22

El Actualizador de software update-manageraparece y muestra actualizaciones de seguridad para Firefox, por ejemplo. Naturalmente, haré clic en "Instalar ahora" para continuar.

Sin embargo, ¿qué sucede si todavía tengo Firefox ejecutándose cuando hago esto? ¿Seguirá actualizando Firefox? ¿Se saltará la actualización y volverá a aparecer la próxima vez? ¿La actualización obligará a Firefox a cerrarse y tal vez bloquearse? ¿Solo actualizará parcialmente el software y posiblemente interrumpirá mi instalación de Firefox?

pie fino
fuente
10
No pasa nada, Firefox está abierto en Ram. A veces detecta la actualización y le dice que reinicie el navegador. Pero tal vez alguien con más perspicacia y referencias pueda dar una mejor respuesta.
pLumo
3
No sé específicamente sobre Ubuntu, pero en Arch (y no creo que sea tan diferente en este caso), actualizar Firefox bajo sus pies mientras se ejecuta parece funcionar, pero lo primero que haces en Firefox bloquea el cosa. Siempre lo atribuí a la naturaleza compleja de los navegadores modernos, cargando en tiempo de ejecución todo tipo de cosas. Pero Firefox es lo único que me pasa.
Tomsmeding
2
Firefox se detendrá la próxima vez que abra una pestaña y le dirá que debe reiniciarse. Otras aplicaciones pueden hacer algo diferente.
Michael Hampton

Respuestas:

40

Debes estar pensando en Windows. Unix lo hizo bien, y luego, apareció Windows y desarrolló formas incorrectas de hacer las cosas.

Con Windows, reemplazar un archivo que está en uso por un proceso en ejecución puede afectar gravemente ese proceso. El proceso hará referencia a ubicaciones dentro de ese archivo y obtendrá información incorrecta del mismo, generalmente con resultados catastróficos. Es por eso que una actualización de Windows generalmente requiere un reinicio para garantizar que todos los procesos estén utilizando versiones correctas de bibliotecas, etc.

Con Unix, una vez que un proceso ha abierto un archivo, ese mismo archivo siempre estará disponible para el proceso, incluso si el archivo original se elimina del sistema de archivos .

Después de una actualización, el sistema de archivos contendrá una versión diferente del archivo, y todos los procesos que comiencen después de la actualización usarán ese nuevo archivo. Pero, a diferencia de Windows, todos los procesos antiguos de Unix continuarán usando los archivos originales con los que comenzaron. Aunque ya no se puede acceder a través del sistema de archivos, esos archivos persistirán mientras cualquier proceso los esté utilizando. Finalmente, cuando ningún proceso esté utilizando los archivos, la versión anterior de los archivos finalmente se eliminará.

Por supuesto, puede decidir reiniciar Firefox (u otros procesos) si desea obtener los beneficios de la actualización de inmediato. La decisión es tuya.

Ray Butterworth
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Thomas Ward
18

Por lo general, actualizar un programa mientras ya está abierto no es un problema, como han explicado los demás respondedores, un proceso en ejecución puede continuar ejecutándose incluso si se elimina su ejecutable.

Sin embargo, debido al modelo multiproceso de Firefox, puede recibir un mensaje para reiniciarlo después de una actualización de todos modos. Esto se debe a que Firefox genera nuevos procesos para aislar diferentes sitios web, por lo que si genera un nuevo proceso después de haberlo actualizado, pero antes de reiniciar Firefox, el nuevo proceso será una versión más nueva de Firefox que el resto del navegador. Esto puede causar varios problemas, por lo que Firefox puede solicitarle que lo reinicie antes de permitirle continuar.

Por cierto, Chrome evita esto mediante el uso de un proceso "cigoto" que se sienta sin hacer nada; cuando el navegador necesita generar un nuevo proceso, en lugar de pedirle al sistema operativo que ejecute nuevamente el ejecutable del navegador (que ejecutaría el binario posiblemente actualizado), le pide al proceso cigoto que se duplique, y una de las copias se convierte en un renderizador normal proceso.

Josh
fuente
1
Además, con una aplicación compleja como Firefox, todo lo que pueda necesitar para lidiar con cualquier cosa que encuentre no se carga en la memoria cuando se inicia el programa. Por lo tanto, los componentes que se cargan según sea necesario pueden crear de manera similar una falta de coincidencia de versiones. A menudo, Firefox se cuelga cuando lo actualizo mientras se ejecutaba.
Fixer1234
No se trata solo de navegadores con modelos multiproceso, sino de cualquier situación en la que las bibliotecas se usan para IPC y las bibliotecas se pueden cargar antes y después de la actualización, aunque los navegadores son probablemente el ejemplo más conocido de esto en estos días (la interoperabilidad COM en Windows es bastante frecuente significa que muchos más programas pueden hacer implícitamente algo como esto). Tampoco puedo imaginar que Chrome evite completamente este problema con el proceso de cigoto: ¿realmente carga todas las bibliotecas que pueda necesitar en cualquier momento durante el inicio?
Voo
@Voo pregunta "¿realmente carga todas las bibliotecas que pueda necesitar en algún momento durante el inicio?". No sé sobre este ejemplo específico, pero en general no es necesario. Todo lo que se requiere es garantizar que cada biblioteca posible se abra al inicio, garantizando así que se leerán los datos correctos en caso de que sea necesario. Abrir un archivo (o docenas de archivos) es un gasto trivial en comparación con cargar todo lo que contienen.
Ray Butterworth
Dato curioso de @Ray: dlopen solo toma un nombre de archivo pero no descriptores de archivo, por lo que puede que no sea tan simple como pensabas (puedes jugar con / proc pero eso es notoriamente diferente a lo largo de * nixes). Pero el problema más grande es que eso eliminaría la mayoría de los casos de uso donde se usa la carga dinámica para empezar.
Voo
@Voo, lo siento, pensé erróneamente que este comentario estaba en el hilo orientado a Unix, no sobre Windows y dlls.
Ray Butterworth