Si sospecha que hay un punto muerto, haga un ps aux | grep <exe name>
, si en la salida, el PROCESS STATE CODE
es D
(Sueño ininterrumpido) significa que es un punto muerto. Porque como explicó @daijo, digamos que tiene dos subprocesos T1
&T2
y dos secciones críticas cada una protegida por semaphores S1 & S2
entonces si T1
adquiere S1
y T2
adquiere S2
y después de eso intentan adquirir el otro bloqueo antes de renunciar al que ya tenían, esto conducirá a un punto muerto y al hacer un ps aux | grep <exe name>
, el process state code
será D
(es decir, sueño ininterrumpido).
Herramientas:
Valgrind, Lockdep (utilidad del kernel de Linux)
Consulte este enlace sobre los tipos de interbloqueos y cómo evitarlos:http://cmdlinelinux.blogspot.com/2014/01/linux-kernel-deadlocks-and-how-to-avoid.html
Editar:ps aux
salida D
"podría" significar que el proceso está en punto muerto, de este documento de redhat:
Estado de suspensión ininterrumpida
Un estado de suspensión ininterrumpida es uno que no manejará una señal de inmediato. Solo se reactivará como resultado de que un recurso esperado esté disponible o después de que ocurra un tiempo de espera durante esa espera (si el tiempo de espera se especifica cuando el proceso se pone en suspensión).
Te sugiero que mires Helgrind:un detector de errores de subprocesos.
El ejemplo más simple de tal problema es el siguiente.
Imagine algún recurso compartido R, que, por alguna razón, está protegido por dos bloqueos, L1 y L2, que deben mantenerse cuando se accede a R.
Suponga que un subproceso adquiere L1, luego L2 y procede a acceder a R. La implicación de esto es que todos los subprocesos en el programa deben adquirir los dos bloqueos en el orden primero L1 y luego L2. No hacerlo corre el riesgo de llegar a un punto muerto.
El interbloqueo podría ocurrir si dos subprocesos, llámelos T1 y T2, ambos desean acceder a R. Suponga que T1 adquiere L1 primero y T2 adquiere L2 primero. Luego, T1 intenta adquirir L2 y T2 intenta adquirir L1, pero ambos bloqueos ya están retenidos. Así que T1 y T2 se bloquean".