5

Ubuntu 10.04 で GTK プログラムを実行していますが、中断可能な状態でハングしますstrace。特に、次の行があります。

read(5, 0x2ba9ac4, 4096) = -1 EAGAIN (Resource temporarily unavailable)

5ファイル記述子、0x2ba9ac4このファイル内の読み取り対象のアドレス、および読み取り対象4096のデータ量であると思われます。確認できますか?さらに重要なことは、プログラムが読み取ろうとしているファイルをどのように判断できるでしょうか。このファイル記述子は存在しません/proc/pid/fd(これがおそらくプログラムがハングする理由です)。

4

3 に答える 3

9

を呼び出すと、このファイル記述子を使用しているファイルを見つけることができますstrace -o log -eopen,read yourprogram。次にlog、対象の呼び出しをファイル内で検索しますread。この行から (ファイルの最初の行からではなく)、このファイル記述子 ( の呼び出しによって返されるopen) の最初の出現箇所を上方に検索します。

たとえば、次のように返されるファイル記述子openは 3 です。

open("/etc/ld.so.cache", O_RDONLY)      = 3
于 2011-03-07T12:47:01.387 に答える
0

の 2 番目の引数read()は単に宛先ポインターであり、ファイル記述子 5 からの読み取りと最大 4096 バイトを要求しています。のマニュアル ページを参照してくださいread()

于 2011-03-04T13:54:40.280 に答える
0

@liberforceの回答に追加すると、プロセスがすでに実行されている場合は、lsofを使用してファイル名を取得できます

フォームトレース

[pid  7529] read(102, 0x7fedc64c2fd0, 16) = -1 EAGAIN (Resource temporarily unavailable)

今、lsofで

lsof -p 7529 | grep 102
java    7529 luis  102u  0000                0,9        0     9178 anon_inode
于 2016-06-22T14:21:52.673 に答える