¿Por qué solo se requiere un reinicio en algunas actualizaciones?

18

¿Por qué Ubuntu no requiere reinicios en más actualizaciones? Sé que para las actualizaciones del kernel y cosas como los controladores de video, no puede cargar los cambios sin reiniciar. Pero tengo curiosidad acerca de las actualizaciones más básicas de paquetes bastante fundamentales que a menudo no requieren reinicios. Cosas como Telepatía, glibc, gtk, etc. ¿Por qué los paquetes como este no requieren un reinicio para actualizarse? ¿Se está ejecutando la nueva versión justo después de una actualización?

Otro ejemplo sería Gwibber. Recientemente recibí y actualicé a gwibber a través del Administrador de actualizaciones mientras se ejecutaba gwibber. La actualización se completó con éxito. ¿Gwibber estaría ejecutando la nueva versión sin reiniciarla manualmente? ¿Y es lo mismo para otros paquetes? (Sé que algunos como mysql y apache se reinician automáticamente en una actualización). Para los paquetes que no se reinician automáticamente, ¿no puede ser un problema de seguridad para la reparación de seguridad?

Esto surge porque he estado ejecutando OS X durante aproximadamente una semana y casi todas las actualizaciones requieren un reinicio, incluso si no está relacionado con el núcleo / controlador de video (por lo que puedo decir, no le brindan mucha información ) Un amigo mío dijo que las fuerzas de Apple se reinician en la mayoría de las actualizaciones "por si acaso" sería extraño si no reiniciaras. Windows es el peor porque casi cualquier instalación / desinstalación o actualización requiere un reinicio (a menudo forzando paradas para tomar un muy largo tiempo). Esto puede ser un poco amplio para este lugar, pero ¿por qué los diferentes sistemas operativos manejan esto de manera tan diferente? O, más específico para Ubuntu: ¿por qué Ubuntu no sigue una política de reinicio más estricta?

gregghz
fuente

Respuestas:

23

Cada vez que abre o ejecuta un archivo en Windows, Windows bloquea el archivo en su lugar (esto es una simplificación, pero generalmente es cierto). Es posible que haya encontrado esos molestos errores en los que no puede eliminar un archivo porque otro proceso tiene un bloqueo exclusivo en eso. Es por eso que cada vez que Windows tiene que actualizarse necesita reiniciar para que surta efecto. Windows pondrá en cola las actividades de reemplazo y eliminación de archivos para la próxima vez que se inicie (cuando nada tiene un bloqueo en nada).

Por otro lado, Linux tiene un mecanismo en el que no está bloqueado el archivo, sino los datos subyacentes en el disco. Esto puede parecer una diferencia trivial, pero significa que el registro del archivo en la tabla de contenido del sistema de archivos se puede eliminar sin alterar ningún programa que ya tenga el archivo abierto. Por lo tanto, puede eliminar un archivo mientras aún se está ejecutando o de otro modo en uso y continuará existiendo en el disco siempre que algún proceso tenga un identificador abierto aunque su entrada en la tabla de archivos haya desaparecido. Esto permite que Linux reemplace un programa por completo mientras aún se está ejecutando y luego simplemente reinicie el programa o simplemente espere a que el proceso salga de forma natural. Una vez que se mata la instancia anterior,

Por lo tanto, siempre que un archivo en particular no sea especial de alguna manera (como, por ejemplo, el archivo de imagen del kernel o los archivos que pertenecen a sistemas de bajo nivel similares), el actualizador puede actualizarse in situ de esta manera. Estoy seguro de que hay casos y situaciones especiales en los que esto no sería una buena idea, pero para la mayoría de los casos está bien.

En cuanto a por qué OS X lo hace, esa teoría "por si acaso" suena plausible.

Andrew Lambert
fuente
1
Para demostrar el punto de Asombrado, crear un archivo test.py: #!/usr/bin/env python print raw_input()Ejecutar este con python test.pyo chmod +x test.py && ./test.pyy, cuando se solicita una respuesta, rm test.py.
raylu
La razón por la que la mayoría de los programas de usuario no se reinicia automáticamente es porque se cree que tienen una vida útil muy corta y prácticamente no tienen privilegios para cambiar el sistema. Si le preocupa, puede cerrar sesión y volver a iniciarla, esto cerrará todos los programas que tenga abiertos.
LassePoulsen
2
En particular, dpkg instala los archivos escribiéndolos en foo.dpkg-new y luego renombrándolos sobre la parte superior de cualquier archivo anterior que estuviera allí, lo que permite actualizaciones in situ de bibliotecas y ejecutables.
Colin Watson el