2011-12-21 11 views
4

プロセスによって確定的なファイルが使用されている場合、つまりファイルがそのプロセスによって読み取り専用モードで開いている場合は、わかります。Linuxシステム上のファイルに関する情報?

私は/ proc/[pid]/[fd]ディレクトリで検索することを考えましたが、この方法では時間を無駄にしてしまいました。

いくつかのLinux APIを使用して、Xファイルがどのプロセスで開いているかを判断する方法はありますか?あるいは、/ procのようないくつかの構造データがファイルのためにありますか?

+2

良い質問。 'lsof'のソースを見ると答えが必要です。 –

答えて

2

プロセスがファイルを使用しているかどうかを判断するのは簡単です。逆はそれほど少ない。その理由は、カーネルが逆関数を直接追跡していないからです。保たれている情報は、次のとおりです。

  1. ファイル自体を参照してくださいどのように多くのリンクを知っている(inodeテーブル)
  2. Aプロセス、それがオープン(ファイルディスクリプタテーブル)を持つファイルを知っている

ですなぜlsofの/ proc walkingが必要ですか?特定のプロセスで使用されているファイルディスクリプタは/ proj/$ PIDに保持されているので、これを使ってpid < - > fd < - > iノード関係のすべてを吐き出すことができます。

This is a nice article on lsof。 Linuxのユーティリティと同様に、あなたはいつでもすべての詳細についてそのソースコードをチェックアウトすることができます:)

1

lsofあなたが探しているツールかもしれません。

EDIT:具体的にアプリケーションに統合されるものを探していることが分かります。私の答えは少し単純です。しかし、とにかく、私はthis questionがあなたとかなり関係していると思います。

+1

これは 'lsof'が'/proc'を歩くことです。 – cnicutar

+0

ええ、それはそのように実装されるかもしれません。そう? – akappa

+0

OPは "それは美しくない"と言った。 – cnicutar

3

わかりません。 lsoffuserのツールは、あなたが提案したとおりに正確に行います。/proc/*/fdをさまよってください。

ファイルを開いた後にファイルを削除した場合、ファイルが名前を持たない可能性があります。ファイルディスクリプタ(mmap)を保持していないプロセスでファイルを開くことも可能です。両方の組み合わせでさえ(プロセス終了時に自動的にクリーンアップされるプロセス専用スワップファイルとなります)。

関連する問題