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/filesを解析することです。
pbsモジュールは外部ユーティリティを呼び出すのに便利です:pbs.lsof( '/ path/to/some/file') –
ありがとうございました!完璧に動作します。 – user1267671