Linuxでファイルを使用するプロセスのPIDを取得する最も効率的な方法は何ですか

Linuxでファイルを使用するプロセスのPIDを取得する最も効率的な方法は何ですか

現在アクセス中のプロセスでそのファイルが開いていることを確認するために、要求に応じてクエリを実行するファイルがあるとします。すべてのPIDを繰り返すのは/proc/{PID}/fdリソース集約的なようです。同じことを行う他の方法はありますか?

ベストアンサー1

これを実行できるツールは次のとおりです。fuser(出力PIDのみ)とlsof(多くのオプションと美しい出力)。

/proc/{PID}/fd のすべての PID を繰り返すのにリソースが多いようです。

とにかくこれがLinuxでは唯一の方法です。どのプロセスでファイルが開いているかを問い合わせるシステムコールはありません。しかし、直接これを実行しないでください。/proc/{PID}/fdこれは厳密に言えば、ファイルを開くだけであり、メモリマップされたファイル、ディレクトリを開くなどの他のケースはリストしないからです。

これは、ファイルを所有していてもルートで検索しない限り、他のユーザーとして実行されているプロセスがファイルを開くことができるかどうかわからないことを意味します。 (しかし、他のユーザーがファイルを見ることができず、ファイルが作成された後、またはシステムが再起動された後でもそのファイルを見ることができない場合、そのようなプロセスは存在しません。)

より一般的には、ユーザーが制御できないプロセスであり、これには、他の名前空間で実行されたり、追加の権限を持つプロセスなどの他の状況が含まれる場合があります。

おすすめ記事