我需要找到誰使用python(posix/linux)來鎖定文件。目前我使用這種方法:查找鎖定文件的進程的PID
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文件。
pbs模塊很適合調用外部實用程序:pbs.lsof('/ path/to/some/file') – 2012-03-14 04:28:21
謝謝!完美的作品。 – user1267671 2012-03-17 17:26:09