Pregunta

Que problema puede causar kill -9 en la aplicación de producción (en Linux para ser exactos)?

Tengo una aplicación que realiza un trabajo periódico, detener estos lleva mucho tiempo, y no me importa si se abortan algunos trabajos: los nuevos procesos pueden terminar el trabajo. Entonces puedo usar kill -9 ¿Solo para detenerlo de inmediato o esto puede causar graves problemas del sistema operativo?

Por ejemplo, Unicornio, lo usa como procedimiento de trabajo normal:

Cuando su aplicación sale mal, un BOFH puede simplemente "matar -9" el proceso de trabajadores fugitivos sin preocuparse por derribar a todos los clientes, solo uno.

Pero esto artículo reclamación (es:

El argumento -9 (o matar) para matar (1) nunca debe usarse en sistemas UNIX

PD: Entiendo que kill -9 No se puede manejar mediante la aplicación, pero sé que para la aplicación de mayo no causa ningún problema, solo estoy interesado, ¿puede causar algunos problemas en el nivel del sistema operativo? shared memory segments active, lingering sockets Me suena peligroso.

¿Fue útil?

Solución

Depende del tipo de aplicación que sea.

Algo como una base de datos puede perder datos (si no escribe todos sus datos en un registro de transacciones persistente a la vez), o tardar más en iniciarse la próxima vez, o ambos.

A pesar de que Solo es un buen principio, pocas aplicaciones actualmente se ajustan a él.

Por ejemplo, la base de datos MySQL no es "solo un bloqueo" y matarla con un Kill -9 dará como resultado un tiempo de inicio significativamente más largo (que un apagado limpio), pérdida de datos o ambos, dependiendo de la configuración (y en cierta medida , suerte).

Por otra parte, Cassandra En realidad, fomenta el uso de Kill -9 como mecanismo de cierre; No admite nada más.

Otros consejos

kill -9 No le da a una aplicación la oportunidad de apagar limpiamente.

Normalmente una aplicación puede atrapar un SIGINT/SIGTERM y apague limpiamente (cierre archivos, guarde datos, etc.). Una aplicación no puede atrapar un SIGKILL (que ocurre con un kill -9) Y así no puede hacer nada de esta limpieza (opcional).

Un mejor enfoque es usar un estándar kill, y si la aplicación no responde, use kill -9.

kill -9 No causará ningún "problema de sistema operativo graves". Pero el proceso se detendrá de inmediato, lo que significa que podría dejar datos en un estado impar.

La señal de matar no puede ser atrapada por la aplicación. Si la aplicación está en el medio de escribir alguna estructura de datos compleja en el disco cuando la mata, la estructura puede estar solo a medias, lo que resulta en un archivo de datos dañado. Por lo general, es mejor implementar alguna otra señal, como el usuario1, como la señal de "parar", ya que esto se puede atrapar y permite que la aplicación se apague de manera controlada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top