Die Ermittlung Datei verursacht, hängen von strace
Habe ich ein GTK-Programm läuft auf Ubuntu 10.04, das hängt in unterbrechbare Zustand, und ich würde gerne verstehen, die Ausgabe von strace
. Insbesondere habe ich diese Zeile:
read(5, 0x2ba9ac4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
Ich vermute 5
ist der file-Deskriptor, 0x2ba9ac4
die Adresse in dieser Datei gelesen werden, und 4096
die Menge der zu lesenden Daten. Kannst du das bestätigen? Noch wichtiger ist, wie kann man bestimmen, welche Datei versucht das Programm zu Lesen? Dieser file-Deskriptor existiert nicht in /proc/pid/fd
(das ist wahrscheinlich der Grund, warum das Programm hängt sich auf).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie herausfinden, welche Datei verwendet diesen Datei-Deskriptor durch den Aufruf
strace -o log -eopen,read yourprogram
. Dann Suche in derlog
- Datei der Aufruf vonread
von Interesse. Aus dieser Linie (und nicht von der ersten Zeile der Datei), Suche nach oben das erste vorkommen dieses file-descriptor (zurückgegeben durch einen Aufrufopen
).Zum Beispiel hier, die Datei-Deskriptor zurückgegeben
open
3:/etc/passwd
... kann ich sicher sein, dass es korrekt ist, d.h., gibt es eine chance, dass die den Datei-descriptor geändert wird in zwischen durch eine andere Funktion alsopen
? Dankopen
mit diesen Dateideskriptor über die fehlerhafteread
, dann ja, die Datei ist eine. Der Datei-Deskriptor kann nur wiederverwendet werden, wennclose
wurde aufgerufen. Wenn Sie sicher sein wollen, verwenden Sie-eopen,read,close
. Ein file-Deskriptor verbunden ist, eindeutig zu einer Datei zwischen den entsprechendenopen
undclose
.Das zweite argument
read()
ist einfach die Ziel-pointer, ist es zu Fragen für einen read from file descriptor 5, - und max 4096 bytes. Sehen die manual-Seite fürread()
.Hinzufügen @liberforce Antwort, wenn der Prozess bereits läuft, können Sie die Datei-Namen mit lsof
form strace
Nun, mit lsof