2017-11-17 7 views
1

Ich habe nach einer Lösung auf Linux gesucht, um herauszufinden, welcher Thread zuerst eine fd erworben hat, aber kein Glück für jetzt.Finden Sie heraus, was Thread geöffnet fd

/proc/pid/task/ 

zeigt die fd zu jedem Thread zur Verfügung steht, was Sinn macht, da Deskriptoren troughout den gesamten Prozessraum zur Verfügung steht.

lsof 

ist natürlich nicht viel Hilfe für diesen Anwendungsfall.

Das Programm ist sehr komplex, und strace oder gdb wird auch nicht helfen, es gibt Tonnen von geschlossenen Quellbibliotheken verwendet. Der Dateipfad ist bekannt, hilft aber nicht, da ich keinen Zugriff auf den Code in den Bibliotheken habe. Ich vermute, dass das Fd-Leck aufgrund einer Race Condition sehr selten passiert und ich den Thread verfolgen muss, der die Datei geöffnet hat.

Eine Lösung, die leicht zu implementieren wäre, wäre für mich ein Protokoll in der Kernel-Datei öffnen Handler oder in der c-Bibliothek, aber aus guten Gründen kann ich weder den Kernel noch die Standard-Bibliothek ändern .

Einige Vorschläge?

+0

@ it tobi303 hinzufügen wo? Ich habe keinen Zugriff auf die Quelle der Bibliothek, die das tut, ich weiß nicht, welche Bibliothek es tut, ich kann weder den Kernel noch die c-Bibliothek ändern. Deshalb muss ich die Thread-ID herausfinden, da es nicht mein Thread ist. –

+0

Es ist nicht mein Thread, der das tut, es stammt von einer Bibliothek, für die ich keinen Zugriff auf Code habe. –

+1

ah ok, Entschuldigung für die Spam;) – user463035818

Antwort

3

Wenn Sie Kernel-Symbole zur Verfügung Verwendung SystemTap haben:

sudo stap -e 'probe syscall.open.return { \ printf("tid=%d, fd=%d\n", tid(), $return) }'

Verwandte Themen