¿Por qué no debería usar 'kill -9' / SIGKILL

14

Publicando esta pregunta porque me sorprendió no encontrarla directamente contestada; disculpas si esto es un duplicado - ¡Lo busqué!

He escuchado eso kill -9o kill -SIGKILLes malo, pero no entiendo por qué. Si no debería, kill -9¿ qué debo hacer para matar un proceso?

dimo414
fuente
2
La premisa de la pregunta es incorrecta. SIGKILL es solo una herramienta. Se recomienda en algunas situaciones y no en otras (como todas las otras herramientas).
kubanczyk
@kubanczyk seguro, pero es una herramienta mal aplicada y utilizada sin entender su propósito. He visto muchos hilos en los que A dice " Sólo kill -9que ", OP dice " grande, que funcionó! Voy a recordar que de ahora en adelante! ", Y B viene en advertir " espera kill -9es peligroso! ", Sólo después del hecho.
dimo414

Respuestas:

15

SIGKILLretira la alfombra de su proceso de ejecución y la termina de inmediato. Para programas muy simples esto está bien; en la práctica, sin embargo, hay muy pocos programas "simples".

Debajo de las cubiertas, incluso los programas aparentemente triviales hacen todo tipo de trabajo transaccional del que necesitan limpiar antes de terminar (piense en el finallybloque en Java y otros lenguajes de programación), como cerrar identificadores de recursos, eliminar archivos temporales y eliminar datos de memoria al disco. No puede anticipar cuándo un programa podría estar haciendo algo como esto.

Si tiene suerte, no notará que algo anda mal si envía un mensaje SIGKILL, pero no puede tener suerte para siempre, y es posible que no sepa que algo salió mal hasta que sea demasiado tarde para recuperar lo perdido.

Casi nunca debería necesitar enviar un SIGKILL, y debe estar seguro de haber agotado sus alternativas antes de hacerlo. En muchos casos, reiniciar (que eventualmente enviará SIGKILLcorreos electrónicos a programas que se comportan mal) es más seguro que enviarlo SIGKILLusted mismo manualmente . Probablemente puedo contar con una mano la cantidad de veces que he necesitado enviar un SIGKILL(y probablemente todo de mi propia creación).

En términos generales, puede usar Ctrl+ C(que envía el proceso en primer plano a SIGINT) o SIGTERM(como en "terminar") para indicar a un proceso que detenga lo que está haciendo y salga.

Algunas lecturas adicionales:

dimo414
fuente