7

lsof を使用して開いている単一のファイルをテストしようとしています。これより速い方法はありますか?

$result = exec('lsof | grep filename | wc -l');

if($result > 0) {
    //file is open
}

ファイル名がわかっている場合は、1つのファイルをテストする方法に違いないと思います。私が本当に必要としているのは、真か偽かだけです。

4

4 に答える 4

3

スキップwcして、grep の戻り値を使用できます (grep は、パターンを検出した場合は 0 (成功) を返し、パターンを検出しなかった場合は 1 (失敗) を返します)。

if lsof | grep filename > /dev/null; then
    # filename is in output of lsof
fi

-lgrep のフラグを使用すると、これを少し改善できます。

if lsof | grep -l filename > /dev/null; then
...

これは、最初の一致を検出したら検索を停止するよう grep に指示します。

于 2010-03-26T22:00:45.593 に答える
2

しないでください。答えは、結果を使って何かをしようとするまでに変わる可能性があります。代わりに、ファイルに対して意図したことは何でも実行して、「使用中」エラーまたは「共有違反」を処理してください。

于 2010-03-27T03:28:17.927 に答える
1

を使用しfuserます。指定されたファイルのいずれかが使用中の場合は 0 以外を返し、すべて使用可能な場合は 0 を返します。

于 2010-03-27T01:56:20.627 に答える