Linuxで/ procに表示されるオープンパイプに関する詳細情報を取得するにはどうすればよいですか?


53

Linuxでは、/proc/<pid>/fd頻繁に掘り下げると、次のような出力が表示されます。

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

どのプロセスが反対側にあるかなど、開いているパイプに関する詳細情報を取得するにはどうすればよいですか?


lsof、全体の発見/procは遅いです。誰かがより効果的なソリューションを提供できますか?
pihentagy

回答:


46

他の回答と似ていますが、次のとおりです。

lsof | grep 90222668

両端が「パイプ番号」を共有するため、両端が表示されます。


3
ああ、もちろん。期待どおりに動作します。出力の4列目を見ると、ファイル記述子番号と、どちらの端がリーダーで、どちらがライターであるかを知ることもできます!
カミルKisiel 09

その番号は、マウントできないpipefsのパイプのiノード番号である可能性があります。iノードからファイル名へのマッピングを取得する方法を探していますが、これが最良の方法かもしれません。ところで、私はこの質問が大好きです:-)
カイル・ブラント

どういうわけかこれは私のために働いていません。出力されるのはパイプ自体だけです。
ルイマーキーズ14年

lsofを標準ユーザーとして実行すると、すべてのプロセスから情報が得られない場合があります。通常、すべてのプロセスの/ proc / <pid> / fdディレクトリを非rootユーザーとして表示する権限はありません。
アンドレホルツナー

5
また、lsof -n -P | grep 90222668不要な名前検索を回避するために使用することもできます。これにより、速度が向上します。
-Wodin

4

反対側のプロセスを見つける唯一の方法は、/ proc内のすべてのプロセスをループし、そのパイプを使用しているプロセスを確認することです(つまり、/ proc / pid / fdに同じパイプIDへのシンボリックリンクがあります)


ヒントをありがとう。これを自動化する一つの方法は次のとおりです。ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID 第二は、あなたのプロセスID与える一方、最初のlsコマンドは、パイプの両端のファイル記述子を出力します
ジョアン・コスタ

2

私が開いているパイプに乗る方法を知っているほとんどの情報は

lsof|grep FIFO

それでも、その一端についてしか語っていないのではないかと心配しています。


これは、/ procから取得できるのとほぼ同じです。lsofは同じ場所から取得すると想定しています。
カミルキジエル2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.