gpt4 book ai didi

sql - lsof 如果文件描述符已打开

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:24 26 4
gpt4 key购买 nike

我使用以下命令来查明文件描述符是否已打开:

/usr/sbin/lsof -a -c sqlplus -u ${USER} | grep -l "${FILE_NAME}”

如果不是,我会执行一些操作。该文件是从 sqlplus 假脱机的日志。

有时lsof告诉文件描述符没有打开,但后来我在这个文件中发现了一些新数据。这种情况很少发生,所以我无法重现它。

  1. 可能是什么原因?
  2. sql 假脱机如何工作?它是否保持从 SPOOL 文件命令到 SPOOL OFF 命令的打开文件描述符,或者是否多次打开和关闭文件描述符?

最佳答案

您可能有一个“race condition ”。 Sqlplus 打开文件,在其中放入一些新数据,然后在 lsof 检查文件和使用 lsof 结果处理文件之间关闭它。

通常,避免文件系统中竞争条件的最佳方法是在处理相关文件之前重命名该文件。重命名是一种相对便宜的操作,这会阻止其他进程在您的进程处理文件时打开/修改该文件。您需要确保,如果该文件在重命名时在另一个进程中打开,那么您需要等到不再通过打开的文件句柄访问该文件,然后您的进程才会处理该文件。

大多数程序员编写的代码都充满了竞争条件。这些会导致各种不可重现的错误。如果您牢记几乎所有程序都有多个进程共享资源,并且共享必须始终受到管理,那么您将成为一名更好的程序员。

关于sql - lsof 如果文件描述符已打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com