Cómo matar procesos que no responden a kill -9

9

Estoy viendo procesos en mi SGI Altix 450 que ejecutan SLES 10.1 aparentemente dejan de funcionar (es decir, no proporcionan más resultados en sus registros durante horas). En este punto, quiero eliminar el proceso ofensivo para poder reiniciarlo. Arriba muestra que el proceso está en el estado (R). Aunque cuando intento matarlo no pasa nada. Incluso cuando uso kill -9 todavía persiste. En este caso, ¿qué puedo hacer además de reiniciar la máquina?

Jared Brown
fuente
2
¿Son definitivamente la misma identificación de proceso? ¿No es que estás matando el proceso y algún demonio está relanzando un proceso con el mismo nombre?
CK.

Respuestas:

9

Es posible que el proceso se cancele pero esperando que el padre recolecte su valor de retorno. En ese caso, después de su muerte, estaría en estado 'Z' y no 'R'. En ese caso, debe encontrar el ppidproceso mediante el pscomando y eliminar el proceso principal también (si está realmente seguro de que no causará ningún problema).

El otro caso podría ser que, por alguna razón, el proceso se reinicia después de ser asesinado como tty. En ese caso, la identificación del proceso debería cambiar cada vez que elimines -9. Vea si la ID del proceso cambia cada vez que intenta matarlo.

Saurabh Barjatiya
fuente
Creo que estoy tratando de matar el proceso principal. Es el proceso padre que está en el estado (R). pstree confirma esto. Los procesos secundarios están todos en estados (Z) zombies. El ppid permanece estático, por lo que no creo que simplemente se esté reiniciando.
Jared Brown
Si elimina el proceso padre (y su proceso padre, etc.), init se convertirá en padre de los procesos hijos que están en estado 'Z' y recolectarán su valor de retorno. Entonces, la mejor manera de eliminar los hijos 'Z' cuyo padre no está tomando su valor de retorno, es matar al padre también para que init se convierta en padre de los procesos hijos muertos.
Saurabh Barjatiya
Este es el problema que estoy teniendo. Enviar una señal -9 a través de kill al proceso padre no lo está terminando.
Jared Brown el
1
Enviar SIGHUP al padre a veces es suficiente. No siempre tienes que matar al padre.
Thomas el
2
Lo siento, SIGCHLD. (demasiado temprano en la mañana)
Thomas
2

El proceso está esperando algún recurso del sistema, ¿tal vez NFS? eso no le permite "soltarse". Me encantaría escuchar algunas soluciones a esto más allá de la mía ...

reinicie la caja o deje que el proceso se asiente.

Me pregunto si podría 'PARAR' el proceso a través de kill -STOP {PID} para evitar que consuma más CPU.

Reiniciarlo debería ser posible incluso con otro proceso detenido, pero puede requerir un puerto de lista o un segmento de memoria compartida que todavía esté en uso por el otro proceso.

ericslaw
fuente
1
¿Un proceso que estaba esperando en NFS o alguna función de E / S para completar no estaría en un estado (D)? Estos procesos están en un estado (R).
Jared Brown
Esto es exactamente lo que me está sucediendo a veces cuando hago el lscomando en un montaje s3fs. El lsproceso no matará incluso kill -9hasta que fuerce el desmontaje conumount -l
Marco Marsala
0

¿Ya has revisado dmesg? He visto esto después de un kernel panic; la única forma de recuperarse es reiniciar (preferiblemente pronto) y luego obtener un kernel parcheado.

Los procesos normales que no se pueden matar estarán en el estado D, no en R.

derobert
fuente
¿Se puede hacer algo con respecto a los procesos difíciles del estado D que no sean reiniciar? ppid = 1
Prof. Moriarty