lsofコマンドを使用せずにスレッドIDで開かれたファイル記述子を表示する方法

lsofコマンドを使用せずにスレッドIDで開かれたファイル記述子を表示する方法

スレッドIDを使用せずに開いたファイル記述子をどのように表示できますかlsof?同様の質問があることを知っていますが、答えにスレッドの詳細は含まれていません。

ベストアンサー1

与えられた答えに加えて、Linuxでは、プロセスによって開始されたすべてのスレッドが通常同じファイル記述子セットを共有することに言及する価値があります。したがって、両方:

ls /proc/$parent_pid/task/$task/fd そして ls /proc/$parent_process/fd

通常、同じ出力を生成します。つまり、子プロセスは親プロセスによって参照されるファイル記述子を継承します。 "lsof"マニュアルは実際に-Kオプション文書でもこれを指定します。

「通常、スレッドとジョブは呼び出し元のファイルを継承しますが、一部のファイルは閉じて他のファイルを開くことができるため、lsofは常にスレッドとジョブに対して開いているすべてのファイルを報告します。」

したがって、潜在的なあいまいさ(以前の回答によって生成された可能性がある)を排除するために、リストは/proc/$parent_pid/$task/fd$ taskがそのディレクトリのファイル記述子IDを参照するスレッドであることを保証しません。特定のファイル記述子が開いているスレッドを知るための安定した方法が必要な場合は、カーネルにファイル記述子の割り当てを要求するなどのstraceシステム呼び出しをプログラムで追跡することができます。open()

おすすめ記事