¿Hay algún comando en Linux a través del cual pueda saber si el proceso está en estado bloqueado?Cómo comprobar si un proceso se encuentra en estado bloqueado (Linux)
Respuesta
¿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.
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.
¿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 usandothread 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".
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
se puede comprobar los archivos
/proc/[pid]/task/[thread ids]/status
- 1. Comprobar si el proceso se ejecuta en Windows/Linux
- 2. Linux - Encuentra si el proceso está listo o correr
- 3. ¿Cómo comprobar si el proceso no responde?
- 4. C# - cómo comprobar si un proceso se inició con éxito
- 5. Comprobar si el proceso se está ejecutando
- 6. Comprobar si polígono se encuentra dentro de un polígono
- 7. ¿Cómo comprobar si un objeto se encuentra fuera del volumen de recorte en OpenGL?
- 8. ¿Cómo comprobar si un archivo está abierto por otro proceso (Java/Linux)?
- 9. Cómo comprobar si una cadena se encuentra en un cierto rango. (Java)
- 10. Perl: ¿una buena forma de comprobar si un valor se encuentra en una matriz?
- 11. ¿Cómo se determina si un objeto está bloqueado (sincronizado) para no bloquearlo en Java?
- 12. ¿Permanece bloqueado un objeto bloqueado si se produce una excepción dentro de él?
- 13. ¿Archivo bloqueado por qué proceso?
- 14. ¿Cómo verifica en Linux con Python si todavía se está ejecutando un proceso?
- 15. Cómo iniciar un proceso detenido en Linux
- 16. ¿Cómo verificar si un proceso se está ejecutando con Delphi?
- 17. ¿Cómo comprobar si un proceso tiene privilegios elevados en Windows 7 utilizando C++ nativo?
- 18. jQuery si se encuentra en la cadena
- 19. ¿Cómo comprobar si existe un proceso con un pid dado en Python?
- 20. Hilo bloqueado con Mutex bloqueado
- 21. MySQL "buena" manera de insertar una fila si no se encuentra, o actualizarla si se encuentra
- 22. ¿Cómo puedo determinar si se gestiona un proceso en C#?
- 23. ASP.NET - ¿Cómo se encuentra la identidad del proceso?
- 24. Proceso de Python bloqueado por urllib2
- 25. Comprobar el estado AutoResetEvent
- 26. ¿Cómo se puede saber si un QMutex está bloqueado o no?
- 27. Cómo comprobar si un archivo existe en un archivo MAKE
- 28. Averigüe cuánto tiempo se bloquea un proceso en espera de E/S en Linux
- 29. ¿Cómo se puede enviar un Ctrl-Break a un proceso Linux en ejecución?
- 30. Cómo comprobar si un comando bash se ha ejecutado correctamente
esta es una pregunta superuser.com. – rsilva4
@ rsilva4 O más bien unix one – OverCoder
'strace -p $ process_id' - si no hay salida continua, eso significa que está esperando algo. Si espera demasiado tiempo, podrías considerar eso "colgado". –