私はかなり複雑なPythonプログラムを持っています。内部的には、排他的(LOCK_EX
)を使用fcntl.flock
してグローバルロックを管理するロギングシステムがあります。事実上、ログメッセージがダンプされるたびに、グローバルファイルロックが取得され、メッセージがファイルに発行され(ロックファイルとは異なります)、グローバルファイルロックが解放されます。
プログラムはまた、(ログ管理が設定された後)それ自体を数回フォークします。一般的にすべてが機能します。
親プロセスが強制終了された場合(そして子が生きたままの場合)、デッドロックが発生することがあります。すべてのプログラムはfcntl.flock()
永久にブロックされます。外部でロックを取得しようとすると、永久にブロックされます。私は問題を解決するために子供たちのプログラムを殺さなければなりません。
しかし、困惑しているのはlsof lock_file
、ロックを保持するプロセスがないことです。そのため、ファイルがカーネルによってロックされている理由を理解できませんが、ファイルを保持していると報告されるプロセスはありません。
flock
フォークに問題がありますか?死んだ親は、プロセステーブルに存在しなくなったにもかかわらず、どういうわけかロックを保持していますか?この問題を解決するにはどうすればよいですか?