いくつかのプロセスの奇妙な動作を追跡しようとしていますが、過去を追跡する方法がわからないポイントに遭遇しました。 strace -p
を使用して接続したハングプロセスは、次のことを示しています。
Process 7926 attached - interrupt to quit
read(3,
さて、fd 3での入力を待っているので、それが何であるかを確認しに行きました。
$ ls -l /proc/7926/fd/3
lr-x------ 1 user grp 64 Mar 15 10:41 /proc/7926/fd/3 -> pipe:[20043922]
さて、それはパイプです...今問題-このパイプの作者は誰ですか? Linuxでは、UNIXドメインソケットにNULバイトで始まるファイルパスを要求して「抽象ソケットネームスペース」にアクセスするための特別な機能があることを思い出します(ここに記載: http://tkhanson.net /cgit.cgi/misc.git/plain/unixdomain/Unix_domain_sockets.html )。利用できるパイプに似たものがあるかどうかはわかりませんが、何も見つかりませんでした。
fuser
やlsof
のようなツールが役立つことを望んでいましたが、どこにも到達していません。
何か案は?
シンボリックリンクのコンテンツ「pipe:[20043922]」は一意のIDです。パイプのもう一方の端には一致するIDがあります。
(find /proc -type l | xargs ls -l | fgrep 'pipe:[20043922]') 2>/dev/null
パイプの両端が表示されます。
lsof
コマンドを使用して、パイプを使用するプロセスのリストを取得できます。
lsof | grep 'FIFO.*20043922'
出力には、リーダー(1rのようなエントリを持つFD列)とライター(2wのようなエントリを持つ同じ列)が表示されます。