我正在尝试测试单个文件是否使用 lsof 打开。有比这更快的方法吗?
$result = exec('lsof | grep filename | wc -l');
if($result > 0) {
//file is open
}
如果您知道文件名,我认为它们必须是一种仅测试一个文件的方法。我真正需要的只是一个真或假。
我找到了一个更好的方法。使用 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
-l
您可以通过使用 grep 的标志来改进这一点:
if lsof | grep -l filename > /dev/null; then
...
这告诉 grep 一旦检测到第一个匹配项就停止查找。
不。当您尝试对结果做任何事情时,答案可能会改变。相反,请尝试对文件执行您打算执行的任何操作并处理“正在使用”错误或“共享冲突”。
使用fuser
. 如果指定的任何文件正在使用,则返回非零值,如果它们全部可用,则返回零。