を見ると、ls -la /proc/<pid>/fd
stdoutがパイプへのリンクであることがわかります。
lr-x------ 1 admin root 64 Jul 9 21:22 1 -> pipe:[1155]
どういう意味ですか?このパイプを聞く人は誰ですか?このプロセスの標準出力をどのように表示できますか?
答え1
次から借りるこの回答これは、PIDを持つプロセスの標準出力が<pid>
次にリダイレクトされたことを意味します。管路(一種の先入選出ファイルシステム階層には表示されません)1155
パイプのinode番号(Linuxでは次のこと/proc/[pid]/fd/
ができます)。proc(5)
詳細はマニュアルページを参照)。
一例:
$ cat - | less
$ pgrep cat
187873
$ ls -l /proc/187873/fd/1
l-wx------ 1 user user 64 Jul 9 22:23 /proc/187873/fd/1 -> 'pipe:[1624839]'
の標準出力はcat
インデックスノードがインパイプの書き込み端にリダイレクトされる1624839
のに対し、 の標準入力はless
読み出し端からリダイレクトされます。
パイプの読み取りの最後に接続されているプロセスについて何も知らない場合は、パイプが開いているすべてのプロセスを検索できます(ただし、それを表示するために必要な権限がない可能性があります)。
$ fuser -v /proc/187873/fd/1
USER PID ACCESS COMMAND
/proc/187873/fd/1: user 187873 F.... cat
user 187874 f.... less
次に、less
開いていることを確認します(読み取り用)。
$ ls -l /proc/187874/fd/0
lr-x------ 1 user user 64 Jul 9 22:28 /proc/187874/fd/0 -> 'pipe:[1624839]'
答え2
パイプのもう一方の端を見つけることができます(プロセスがまだ存在する場合)。
ls -l /proc/[1-9]*/fd 2>/dev/null | grep -B 3 -F 'pipe:[1155]'