使用lsoffind一个打开的文件最快的方法是什么?

我试图testing一个文件,如果它是打开使用lsof。 有没有比这更快的方法?

$result = exec('lsof | grep filename | wc -l'); if($result > 0) { //file is open } 

我想他们一定是一个方法来testing一个文件,如果你知道文件名。 我真正需要的是真实的还是虚假的。

Solutions Collecting From Web of "使用lsoffind一个打开的文件最快的方法是什么?"

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

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

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

 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在检测到第一个匹配时停止查找。

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

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