Мне нужно найти, кто заблокировал файл с помощью 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.