Question

Dans l'espace utilisateur Linux, un processus bloquant un sémaphore est détecté par strace. Une fois que la condition d'erreur s'est produite, le blocage est répétable. Il doit donc exister un autre processus contenant le sémaphore et ne le libérant pas.

Existe-t-il un moyen de savoir quel autre processus contient actuellement le sémaphore?

ipcs répertorie le sémaphore, de même que / proc / sysvipc / sem. Où puis-je trouver des informations sur le processus de conservation?

Était-ce utile?

La solution

Les sémaphores ne sont pas des mutex. Vous ne tenez pas " leur. Si le processus est bloqué, cela signifie qu'il attend que quelqu'un d'autre fasse un "up" " ou " V " opération à l'avenir. Il n’existe aucun outil du noyau qui puisse vous dire quel sera le comportement futur des logiciels.

Autres conseils

Il existe peut-être un moyen plus simple mais vous pouvez utiliser l’appel semctl () avec le cmd GETPID. Cela devrait renvoyer le processus qui a exécuté le dernier appel semop () pour le sémaphore. Ce n'est peut-être pas votre processus frauduleux, mais c'est probablement un bon indice.

Pour rechercher les pids associés à la liste des tableaux de sémaphore répertoriés par ipcs -s , 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

" ipcs -p " ne peut pas montrer les sémaphores du processus en cours, ça doit être un bug, ou c'est une limite parce que c'est difficile à montrer. Vous devez interroger vous-même.

  1. exécutez " ipcs -s " pour obtenir tous les semid
  2. pour chaque cycle "& ip; ipcs -s -i"
  3. pour chaque semnum, pour obtenir le pid du propriétaire, si vous voulez le pid du propriétaire, affichez le semid et le semnum actuels.

Remarque: si le processus ne lit que les sémaphores, vous ne pouvez pas obtenir ces informations via la commande ipcs.

Avez-vous essayé

ipcs -p
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top