lsof を使用して開いている単一のファイルをテストしようとしています。これより速い方法はありますか?
$result = exec('lsof | grep filename | wc -l');
if($result > 0) {
//file is open
}
ファイル名がわかっている場合は、1つのファイルをテストする方法に違いないと思います。私が本当に必要としているのは、真か偽かだけです。
スキップwc
して、grep の戻り値を使用できます (grep は、パターンを検出した場合は 0 (成功) を返し、パターンを検出しなかった場合は 1 (失敗) を返します)。
if lsof | grep filename > /dev/null; then
# filename is in output of lsof
fi
-l
grep のフラグを使用すると、これを少し改善できます。
if lsof | grep -l filename > /dev/null; then
...
これは、最初の一致を検出したら検索を停止するよう grep に指示します。
しないでください。答えは、結果を使って何かをしようとするまでに変わる可能性があります。代わりに、ファイルに対して意図したことは何でも実行して、「使用中」エラーまたは「共有違反」を処理してください。
を使用しfuser
ます。指定されたファイルのいずれかが使用中の場合は 0 以外を返し、すべて使用可能な場合は 0 を返します。