使用lsof查找单个打开文件的最快方法是什么?

时间:2010-03-26 21:56:43

标签: php linux file lsof

我正在尝试使用lsof打开单个文件。有没有比这更快的方法?

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

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

我认为如果你知道文件名,他们必须只是测试一个文件的方法。我真正需要的只是真或假。

4 个答案:

答案 0 :(得分:10)

我找到了一个更好的方法。使用lsof(在4.63版本上测试),您可以直接查询特定文件:

if lsof filename > /dev/null; then
    # file is open
fi

答案 1 :(得分:2)

好吧,你可以跳过wc并使用grep的返回值(grep如果检测到模式则返回0(即成功),如果没有检测到模式,则返回1(即not success)):

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

您可以使用grep的-l标志来改善这一点:

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

这告诉grep一旦检测到它的第一场比赛就停止查看。

答案 2 :(得分:1)

使用fuser。如果指定的任何文件正在使用,则返回非零值,如果它们全部可用,则返回零。

答案 3 :(得分:1)

别。当你尝试对结果做任何事情时,答案可能会改变。相反,尝试对文件执行任何操作并处理“使用中”错误或“共享违规”。