Comment trouver concrètement les impasses d'un processus sous UNIX?

Sous Unix, un processus est bloqué, vous doutez que cela puisse être une impasse, trouvez les raisons de l’impasse et comment le supprimer et l’éviter?

Je connais les 4 conditions pour une impasse:

  1. Exclusion mutuelle: une ressource peut être affectée à au plus un processus à la fois (pas de partage).

  2. Mise en attente et attente: un traitement contenant une ressource est autorisé à en demander une autre.

  3. Pas de préemption: un processus doit libérer ses ressources; ils ne peuvent pas être enlevés.

  4. Attente circulaire: il doit exister une chaîne de processus telle que chaque membre de la chaîne attend une ressource détenue par le prochain membre de la chaîne.

Mais, ils sont théoriques, comment déterminer pratiquement une impasse sur unix? Seulement en voyant qu'un processus ne progresse pas? Comment trouver quelle partie du code cause l'impasse et les raisons? Si vous êtes autorisé à utiliser des outils, que peut-on utiliser?

Merci

3
Cette question est trop générale. Si vous posez des questions sur un programme spécifique bloqué, vous pouvez donner des détails.
ajouté l'auteur Dietrich Epp, source
Pensez-vous que le remplacement de "processus" par "thread" représentera mieux votre question?
ajouté l'auteur qqqqq, source

2 Réponses

There is also Valgrind's Helgrind tool: Helgrind: a thread error detector

Helgrind est un outil Valgrind permettant de détecter les erreurs de synchronisation dans les programmes C, C ++ et Fortran utilisant les primitives de threading pthreads POSIX.

     

Les principales abstractions dans les pthreads POSIX sont les suivantes: un ensemble de threads partageant un espace d'adressage commun, la création de threads, la jonction de threads, la sortie de threads, les mutex (verrous), les variables de condition (notifications d'événements inter-threads), les verrous lecteur-écrivain, spinlocks, sémaphores et barrières.

     

Helgrind peut détecter trois classes d’erreurs, décrites en détail dans les trois sections suivantes:

     
      
  1. Abus de l'API POSIX pthreads .

  2.   
  3. blocages potentiels résultant de problèmes de commande de verrouillage .

  4.   
  5. Courses de données - accès à la mémoire sans verrouillage ou synchronisation adéquat .

  6.   

Des problèmes de ce type entraînent souvent des collisions non reproductibles, dépendantes du temps, des blocages et d'autres inconduites, et peuvent être difficiles à trouver par d'autres moyens.

Helgrind est au courant de toutes les abstractions de pthread et suit leurs effets aussi précisément que possible. Sur les plates-formes x86 et amd64, il comprend et gère partiellement le verrouillage implicite découlant de l'utilisation du préfixe d'instruction LOCK.

Helgrind fonctionne mieux lorsque votre application utilise uniquement l'API POSIX pthreads. Toutefois, si vous souhaitez utiliser des primitives de thread personnalisées, vous pouvez décrire leur comportement à Helgrind à l'aide des macros ANNOTATE_ * définies dans helgrind.h. Cette fonctionnalité a été ajoutée à la version 3.5.0 de Valgrind et est considérée comme expérimentale.

5
ajouté
1
ajouté
(TgLINUX) GNU/LINUX fr-Tchat TeleGram
(TgLINUX) GNU/LINUX fr-Tchat TeleGram
565 des participants

Groupe d'échange et d'entraide sur les OS GNU/Linux exclusivement, ouvert au public débutants,passionnés & habitués. $sudo ./bienvenue.sh REGLES(CGU): http://telegra.ph/TgLinux-09-03 FBK,TWEET: @TgLinux CHAINE:@UbuntuFacile @FrLibreOffice