web-dev-qa-db-ja.com

パイプの反対側にあるプロセスを見つける

いくつかのプロセスの奇妙な動作を追跡しようとしていますが、過去を追跡する方法がわからないポイントに遭遇しました。 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 )。利用できるパイプに似たものがあるかどうかはわかりませんが、何も見つかりませんでした。

fuserlsofのようなツールが役立つことを望んでいましたが、どこにも到達していません。

何か案は?

34
FatalError

シンボリックリンクのコンテンツ「pipe:[20043922]」は一意のIDです。パイプのもう一方の端には一致するIDがあります。

(find /proc -type l | xargs ls -l | fgrep 'pipe:[20043922]') 2>/dev/null

パイプの両端が表示されます。

32
Kyle Jones

lsofコマンドを使用して、パイプを使用するプロセスのリストを取得できます。

lsof | grep 'FIFO.*20043922'

出力には、リーダー(1rのようなエントリを持つFD列)とライター(2wのようなエントリを持つ同じ列)が表示されます。

2
Eugen