2010-09-07 17 views

Respuesta

5

¿Qué quiere decir con 'estado suspendido'? Por lo general, un proceso que no responde y utiliza el 100% de una CPU está atorado en un bucle infinito. Pero there's no way para determinar si eso ha sucedido o si el proceso podría no alcanzar eventualmente un estado de salida de bucle y continuar.

Los detectores de colgar de escritorio solo funcionan al enviar un mensaje al bucle de evento de la aplicación y ver si hay alguna respuesta. Si no hay un tiempo determinado, deciden que la aplicación se ha "colgado" ... pero es completamente posible que solo haya estado haciendo algo complicado y que vuelva a la vida en un momento una vez que esté hecho. De todos modos, eso no es algo que puedas usar para cualquier proceso arbitrario.

1

Lamentablemente, no hay un estado bloqueado para un proceso. Ahora colgado puede ser un punto muerto. Esto es estado de bloqueo. Los hilos en el proceso están bloqueados. Las otras cosas podrían ser el bloqueo en vivo donde se está ejecutando el proceso, pero haciendo lo mismo una y otra vez. Este proceso está en estado de ejecución. Entonces, como pueden ver, no hay un estado definido. Como se sugiere, puede usar el comando superior para ver si el proceso usa 100% de CPU o mucha memoria.

19

¿Hay algún comando en Linux a través del cual pueda saber si el proceso está en estado bloqueado?

No hay ningún comando, pero una vez tuve que hacer un truco muy tonto para lograr algo similar. Escribí un guión Perl, que periódicamente (cada 30 segundos en mi caso):

  • plazo ps para encontrar la lista de los PID de los procesos observados (junto con el tiempo ejecutivo, etc.)
  • bucle sobre los PID
  • comenzar gdb adhiriéndose al proceso mediante su PID, el vertido seguimiento de la pila de ella usando thread apply all where, separándose del proceso
  • un proceso fue ahorcado si:
    • su seguimiento de la pila no cambió y el tiempo no cambió después de 3 controles
    • su seguimiento de la pila no cambió y el tiempo estaba indicando carga de la CPU 100% después de 3 controles
  • proceso de colgado murió para dar una oportunidad una aplicación de monitoreo para reiniciar la instancia colgada.

Pero eso fue muy, muy, muy crudo truco, hecho para alcanzar una fecha límite que se puede perder y fue eliminado pocos días después, después de que finalmente se instaló una solución para la aplicación defectuosa.

De lo contrario, como todos los demás respondedores correctamente comentado, no hay manera de encontrar si el proceso se colgó o no: simplemente porque el bloqueo puede ocurrir por muchas razones, a menudo vinculadas a la lógica de la aplicación.

La única forma es que la aplicación sea capaz de indicar si está activa o no. La forma más simple podría ser, por ejemplo, un mensaje de registro periódico "estoy vivo".

+0

Si bien todo el mundo se apresura a citar el problema de detención, me gusta cómo su respuesta es orientada a la ingeniería. Si bien es cierto que no podemos determinar si el proceso aritmético arbitrario X ** ** terminará el procesamiento antes de que haya terminado de procesarse, podemos imponer límites a los que conocemos. Es mejor solucionar el problema subyacente, pero matar y reiniciar un proceso no es tan sucio como parece ser:) – Indolering

15

se puede comprobar los archivos

/proc/[pid]/task/[thread ids]/status 
Cuestiones relacionadas