咨询锁fcntl是基于每个进程的,并且只是在给定进程的文件上累积锁定间隔。也就是说,由应用程序来跟踪间隔,并且间隔的任何解锁调用都将解锁它,无论该间隔进行了多少次锁定调用。
更糟糕的是,关闭文件的任何文件描述符都会取消文件上的所有锁定:
除了通过显式 F_UNLCK 删除记录锁之外,当进程终止或关闭任何引用持有锁的文件的文件描述符时,记录锁也会自动释放。这很糟糕:这意味着当由于某种原因库函数决定打开、读取和关闭文件(例如 /etc/passwd 或 /etc/mtab)时,进程可能会失去对文件的锁定。