【发布时间】:2014-11-16 20:25:12
【问题描述】:
使用 fcntl(非阻塞)或某种自定义方式锁定文件。所以我正在使用 lsof 并检查进程的 pid 是否在那里。如果 lsof 返回空白,则表示没有使用它。
但是我脚本中的 lsof 需要 200 毫秒。
在 Windows 上,当我尝试测试文件是否被锁定时,我只需打开文件并在错误时将其锁定,这需要 5 毫秒。是否有任何替代 lsof 的方法来进行快速测试以查看是否有文件持有?
【问题讨论】:
-
谢谢,我会检查一下并报告速度:)
-
我将其添加为答案,如果它解决了您的问题,请告诉我。
-
lsof默认尝试解析主机名。lsof -n没有,而且速度更快。 -
@Noitidart 我的评论只是关于为什么
lsof通常很慢的常见原因。无论如何,您应该在问题中包含您使用lsof的命令行。我刚刚在一个终端中尝试了touch /tmp/locked ; flock /tmp/locked -c "sleep 120",在另一个终端中尝试了time lsof -F cl /tmp/locked。报告时间为 0.074 秒。-F cl要求以某种更容易从调用者脚本解析的方式输出命令名称和锁定状态。 -
如果您的锁定时间较短(您在下面提到 30 毫秒),您可能应该放弃脚本并制作一个简单的 C 程序,或者重新考虑整点(也许 xyproblem.info 与此相关)。
标签: lsof