Traté de eliminar todos mis trabajos en segundo plano enviados anteriormente bajo KUbuntu por
kill -9 $(jobs -p)
Aunque este comando inmediatamente dio el mensaje como
[1] Mató a myjob1
[2] Mató a myjob2
Todavía puedo ver sus procesos colgados en la salida de la parte superior y los usos de la CPU y la memoria no cambian en la salida del tiempo de actividad y son gratuitos.
Así que supongo que no debo haberlos matado correctamente. ¿Puede alguien explicarme qué me está pasando y qué debo hacer?
Descubrí que en la parte superior, si escribo k e ingreso el PID, puedo eliminar los procesos uno por uno. Entonces, ¿esto es diferente del comando kill?
También encontré un sitio en línea http://www.ruhr.de/home/smallo/award.html sobre no recomendar kill -9
Uso inútil de Kill -9 forma carta
(Cita abominación)
No no no. No uses kill -9.
No le da al proceso la oportunidad de limpiar:
1) apague las conexiones del zócalo
2) limpiar archivos temporales
3) informar a sus hijos que se va a ir
4) restablecer sus características de terminal
Y así sucesivamente y así sucesivamente y así sucesivamente.
En general, envíe 15 y espere un segundo o dos, y si eso no funciona, envíe 2, y si eso no funciona, envíe 1. Si eso no funciona, ¡QUITE EL BINARIO porque el programa se comportó mal!
No uses kill -9. No saque la cosechadora solo para ordenar la maceta.
¿Es esto cierto? ¿Qué significa "enviar 15", "enviar 2" y "enviar 1"? ¿Son ellos mismos comandos o "kill -15 PID", "kill -2 PID" y "kill -1 PID"?
¡Gracias y saludos!
Respuestas:
Probablemente su proceso esté muerto, pero aún aparece en la entrada de la tabla de proceso porque es un "proceso zombie". Cuando un proceso hijo finalizó y desapareció por completo (excepto su entrada en la tabla de proceso) y el padre no pudo recuperar su estado de finalización (a través de ninguna de las funciones de espera), se llama zombie ... Matar (a través de la señal) un zombie no funciona porque ya está terminado. Lo que debe hacer es averiguar su proceso principal y matarlo a través de una limpieza, por lo tanto, no usar kill - 9
Aquí hay dos pasos simples para matar a un zombie ...
fuente
-f
bandera a ps para ver los procesos principales.vea
man kill
una definición de las diversas señales disponibles, pero sí.Estos informan a un proceso que el usuario ha "terminado" con el proceso, aunque indican razones algo diferentes. SIGTERM podría interpretarse como "finalizar la tarea actual, pero luego salir; no iniciar otro", SIGINT significa "abandonar lo que usted estás haciendo y renuncias ", SIGHUP simplemente significa que ya nadie está escuchando (un proceso de servidor podría reaccionar legítimamente a SIGHUP al descontinuar la salida de la consola y continuar ejecutándose).
fuente
Significa usar
kill -15 PID
(u otro número) en lugar dekill -9 PID
. Los números son equivalentes a diferentes señales de unix .fuente
Significa escribir "kill -1" o "kill -15" en lugar de escribir "kill -9". Kill -9 es una bala dura en la cabeza de cualquier proceso en ejecución, lo mata en un estado sucio que puede causar fugas de memoria, bla, bla.
Si está escribiendo kill -9 y no funciona, entonces me aseguraré de que el proceso no se reaparezca y que tenga permiso para matar ese proceso.
fuente
La señal 9 es SIGKILL. Enviar un SIGKILL es pedirle al sistema operativo que elimine el proceso inmediatamente, sin hacer preguntas. El proceso no se notifica por adelantado y no tiene la posibilidad de limpiarse después de sí mismo.
La señal 15 es SIGTERM. Enviar un SIGTERM es pedirle al sistema operativo que solicite que el proceso se cierre por sí solo.
SIGKILL puede ignorarse si el sistema operativo cree que el proceso está haciendo IO, o si se trata de un zombi (un proceso secundario cuyo padre no limpió después).
SIGTERM puede ser ignorado por la aplicación, pero no se recomienda que las aplicaciones hagan esto, ya que los sistemas operativos envían SIGTERM durante el apagado, seguido de SIGKILL en breve si todavía se está ejecutando un programa.
Nota: La línea de comando
kill
siempre le pide al sistema operativo que envíe una señal a la aplicación, lo que puede o no hacer según el propietario del proceso, etc.fuente