我需要找到谁使用 python (posix/linux) 锁定了文件。目前我使用这种方法:
flk = struct.pack('hhqql', fcntl.F_WRLCK, 0, 0, 0, 0)
flk = struct.unpack('hhqql', fcntl.fcntl(self.__file, fcntl.F_GETLK , flk))
if flk[0] == fcntl.F_UNLCK:
# file is unlocked ...
else:
pid = flk[4]
此解决方案与体系结构无关。传递给 fcntl 的结构包含诸如 off_t 或 pid_t 之类的字段。我无法对这些类型的大小做出假设。
struct flock {
...
short l_type; /* Type of lock: F_RDLCK,
F_WRLCK, F_UNLCK */
short l_whence; /* How to interpret l_start:
SEEK_SET, SEEK_CUR, SEEK_END */
off_t l_start; /* Starting offset for lock */
off_t l_len; /* Number of bytes to lock */
pid_t l_pid; /* PID of process blocking our lock
(F_GETLK only) */
...
};
有没有其他方法可以找到PID?或者 off_t 和 pid_t 的大小?解决方案必须完全 可移植 在不同架构之间。
编辑
我决定按照下面的建议使用 lsof 程序。另一种选择是解析/proc/locks 文件。
最佳答案
也许您可以尝试使用外部程序 lsof 来做到这一点?
关于python - 查找锁定文件的进程的PID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9693532/