pidが与えられたら、すべてのファイルを開いて次のように書くことができます。
lsof -p 28827 | awk '$4 ~ "[wW]"{print $(NF-1), $NF}'
そのうちの1つは最終的にパイプになります。
28827 232611 pipe
このパイプで開かれたすべてのファイルを見つけたいです。私がこうすれば:
lsof | grep 232611
これは私にいくつかのプロセスを提供し、そのうちの1つは次のとおりですtee
。
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
<app> 28827 <me> 1w FIFO 0,8 0t0 232611 pipe
<app> 28827 28836 <me> 1w FIFO 0,8 0t0 232611 pipe
<app> 28827 28901 <me> 1w FIFO 0,8 0t0 232611 pipe
....
tee 28828 <me> 0r FIFO 0,8 0t0 232611 pipe
プログラムで(または一般的にアクセス可能なプロセス)どうやって探しますかPID
?列ではなく、ほとんどの行について簡単に確認することはできません。tee
r
$4 ~ "r"
$4
FD
答え1
単に数字の後に1つ以上のsが続くだけで十分ですr
。
lsof | grep -P '\b\d+r+\b'
またはGNU grepがない場合:
lsof | grep -E '\b[0-9]+r+\b'
sは\b
単語の境界を表示し、フィールド全体が一致することを確認します。あるいは、grepがサポートしている場合は、次の-w
フラグを使用できます。
lsof | grep -wE '[0-9]+r+'
したがって、これを使用すると関連するPIDを取得できます
lsof | grep -wE '[0-9]+r+' a | awk '{print $2}'
@derobertは、以下のコメントで2562行を実際に読み取るのに時間がかかると、印刷するフィールドを選択するオプションが提供されるman lsof
ことを指摘しました。-F
ファイルのアクセスタイプを取得するには、次のようにしますa
。
lsof -p 28827 -F a