Quelles informations puis-je find sur un événement sur un thread en cours d'exécution?

Suite à un problème décrit dans " Comment est-ce que je peux attacher strace à un process qui n'est pas dans la sortie de ps? "

J'essaie de déboguer un process qui se bloque à mi-path.

En utilisant strace -f sur mon process parent, j'ai pu déterminer que j'ai un tas de threads qui sont juste en train de montrer:

 # strace -p 26334 Process 26334 attached - interrupt to quit epoll_wait(607, {}, 4096, 500) = 0 epoll_wait(607, {}, 4096, 500) = 0 epoll_wait(607, {}, 4096, 500) = 0 epoll_wait(607, {}, 4096, 500) = 0 epoll_wait(607, ^C <unfinished ...> Process 26334 detached 

Enquêter davantage:

 # readlink /proc/26334/fd/607 anon_inode:[eventpoll] 

Mon instinct me dit que j'ai réussi à get quelques threads dans une situation de blocage, mais je n'en sais pas assez sur epoll pour aller de l'avant. Existe-t-il des commands qui peuvent me donner un aperçu de ce que searchnt ces threads ou des descripteurs de file auxquels ce descripteur epoll correspond.

Lorsque vous exécutez strace les lignes strace sont des fonctions système. Au cas où il n'était pas évident epoll_wait() est une fonction que vous pouvez faire un man epoll_wait pour découvrir les détails de l'implémentation comme ceci:

  epoll_wait, epoll_pwait - wait for an I/O event on an epoll file descriptor 

La description de epoll :

L'API epoll effectue une tâche similaire à poll (2): surveiller plusieurs descripteurs de files pour voir si les E / S sont possibles sur l'un d'entre eux. L'API epoll peut être utilisée en tant qu'interface déclenchée par un front ou déclenchée par niveau et s'adapte bien à un grand nombre de descripteurs de files surveillés.

Il semblerait donc que votre process bloque les descripteurs de files, en attendant de voir si les E / S sont possibles sur l'un d'entre eux.

Je changerais un peu de tactique et j'essayerais d'utiliser lsof -p <pid> pour voir si vous pouvez lsof -p <pid> ce que sont ces files.