Comment détecter et de trouver un programme dans l'impasse?
C'est une question d'entrevue.
Comment détecter et de savoir si un programme est dans l'impasse? Y at-il des outils qui peuvent être utilisés pour faire que sur Linux/Unix systèmes?
Mon idée:
Si un programme ne fait pas de progrès et que son statut est en cours d'exécution, c'est l'impasse. Mais, d'autres facteurs peuvent causer ce problème. Les outils Open source sont valgrind (halgrind) peut le faire. Droit?
OriginalL'auteur user1002288 | 2012-02-22
Vous devez vous connecter pour publier un commentaire.
Je vous suggère de regarder Helgrind: un fil d'erreur du détecteur de.
OriginalL'auteur daijo
Si vous soupçonnez une impasse, faire un
ps aux | grep <exe name>
, si en sortie, lePROCESS STATE CODE
estD
(sans interruption du sommeil) signifie qu'il est dans une impasse.Parce que @daijo expliquer, disons que vous avez deux fils
T1
&T2
et deux sections critiques chacune protégée parsemaphores S1 & S2
alors siT1
acquiertS1
etT2
acquiertS2
et après qu'ils essaient d'obtenir le verrouillage de l'autre avant de l'abandonner celui déjà détenues par eux, cela conduira à une impasse et à faire unps aux | grep <exe name>
, leprocess state code
seraD
(c'est à dire sans interruption de sommeil).Outils:
Valgrind, Lockdep (noyau linux utilitaire)
Vérifier ce lien sur les types de blocages et comment les éviter :
http://cmdlinelinux.blogspot.com/2014/01/linux-kernel-deadlocks-and-how-to-avoid.html
Edit:
ps aux
sortieD
"pourrait" signifie le processus est dans l'impasse, à partir de ce redhat doc:Je suis d'accord avec @excalibur, il est dit dans le lien fourni, que le processus
could
être dans l'impasse.OriginalL'auteur brokenfoot