我需要找到谁使用 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/

10-11 21:55