GNU/Linux >> Linux の 問題 >  >> Linux

Linux – / proc / pid / fd / xリンク番号?

Linuxの場合、/proc/PID/fd/X 、パイプまたはソケットであるファイル記述子のリンクには、次のような番号があります。

l-wx------ 1 user user 64 Mar 24 00:05 1 -> pipe:[6839]
l-wx------ 1 user user 64 Mar 24 00:05 2 -> pipe:[6839]
lrwx------ 1 user user 64 Mar 24 00:05 3 -> socket:[3142925]
lrwx------ 1 user user 64 Mar 24 00:05 4 -> socket:[3142926]
lr-x------ 1 user user 64 Mar 24 00:05 5 -> pipe:[3142927]
l-wx------ 1 user user 64 Mar 24 00:05 6 -> pipe:[3142927]
lrwx------ 1 user user 64 Mar 24 00:05 7 -> socket:[3142930]
lrwx------ 1 user user 64 Mar 24 00:05 8 -> socket:[3142932]
lr-x------ 1 user user 64 Mar 24 00:05 9 -> pipe:[9837788]

最初の行のように:6839。その数字は何を表していますか?

承認された回答:

これは、問題のパイプまたはソケットのiノード番号です。

パイプは、書き込み端と読み取り端を持つ単方向チャネルです。あなたの例では、iノード番号が同じであるため、FD5とFD6が互いに通信しているように見えます。 (ただし、そうではないかもしれません。以下を参照してください。)

プログラムがパイプを介してそれ自体と通信するのを見るよりも一般的なのは、互いに通信する別個のプログラムのペアです。これは通常、シェルを使用してそれらの間にパイプを設定するためです。

shell-1$ ls -lR / | less

次に、別のターミナルウィンドウで:

shell-2$ ...find the ls and less PIDs with ps; say 4242 and 4243 for this example...
shell-2$ ls -l /proc/4242/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 1 -> pipe:[222536390]
shell-2$ ls -l /proc/4243/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 0 -> pipe:[222536390]

これは、PID 4242の標準出力(慣例によりFD 1)がiノード番号222536390のパイプに接続され、PID 4243の標準入力(FD 0)が同じパイプに接続されていることを示しています。

これらはすべて、lsと言う長い道のりです。 の出力はlessに送信されています の入力。

例に戻ると、FD1とFD2はほぼ確実にありません。 お互いに話します。ほとんどの場合、これはstdout(FD 1)とstderr(FD 2)を結び付けた結果であるため、両方とも同じ宛先に移動します。次のようなBourneシェルを使用してこれを行うことができます:

$ some-program 2>&1 | some-other-program

したがって、/proc/$PID_OF_SOME_OTHER_PROGRAM/fdをざっと見て回った場合 、some-programのFD1および2に接続されているのと同じiノード番号のパイプに接続されている3番目のFDが見つかります。 実例。これは、あなたの例のFD 5と6で起こっていることでもあるかもしれませんが、これら2つのFDがどのように結び付けられたかについての理論はありません。それを理解するには、プログラムが内部で何をしているのかを知る必要があります。

関連:Linux –「興味深い」マウントポイントのみを表示/興味のないタイプをフィルタリングしますか?
Linux
  1. Linux/procファイルシステムの調査

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. Linux –プロセス開始後に/ proc / pid / environを変更しますか?

  1. Linux – Proc // fdinfo / 0の重要性?誰が作成しますか?

  2. Unix / Linux でプロセスのパスを取得するにはどうすればよいですか

  3. Linux で /proc/pid/pagemap エントリをデコードするには?

  1. Linux – / proc/mntを/proc/ mountsにリンクしますか?

  2. Linux – / proc / cpuinfo内のプロセッサの数?

  3. Linux –ブロックデバイスが/sysまたは/procから読み取り専用かどうかをテストする方法は?