Dans UserSpace Linux, j'ai un processus de blocage sur un sémaphore, comme l'a été trouvé par la strace. Une fois que la condition d'erreur se produit, le blocage est répétable, il doit donc y avoir un autre processus qui détient le sémaphore et ne le libère pas. P>
Y a-t-il un moyen de savoir quel autre processus maintient actuellement le sémaphore? P>
IPCS code> répertorie le sémaphore, donc / proc / sysvipc / sem. Où puis-je trouver des informations sur le processus de maintien? P>
5 Réponses :
Avez-vous essayé
Ne semble pas fonctionner avec sémaphore. Je peux voir la clé d'accord, mais IPCS -P -S -S ne donne aucune sortie.
Les sémaphores ne sont pas des mutiles. Vous ne les "tenez pas". Si le processus est bloqué, cela signifie qu'il attend que quelqu'un d'autre fasse une opération "up" ou "v" sur elle à l'avenir. Il n'y a pas d'outil de noyau qui vous dira quel sera le comportement futur du logiciel. P>
Il peut y avoir une solution plus facile, mais vous pouvez utiliser l'appel SEMCTL () avec la cmd getpid. Cela devrait renvoyer le processus qui a exécuté le dernier smop () appeler le sémaphore. Cela peut être ou non votre processus de voyous, mais c'est probablement un bon indice. P>
"IPCS -P" ne peut pas montrer les sémaphores du processus tenant, qui doit être un bogue ou une limite car il est difficile de montrer. Vous devez interroger par votre sitef. P>
REMARQUE: Si le processus vient de lire des sémaphores, vous ne pouvez pas obtenir de telles informations via la commande IPCS. P>
Pour trouver les PID associés à la liste des tableaux de sémaphore énumérés par IPCS -S -S code> Vous pouvez exécuter ceci:
for pid in $( for semid in $( sudo ipcs -s | awk '/0x/{ print $2 }' ); do sudo ipcs -s -i $semid | tail -2 | head -1 | awk '{print $5}'; done | sort -u ); do ps uh -p $pid; done