ロックファイルが消える
ファイルロックにflockを使っているのですが、複数のファイルを扱うので、データファイルにロックをかけるのではなく別途「ロックファイル」に対してロックをかけています。
データファイルであれば読み書きモードで開く必要がありますが、ロックファイルは中身はどうでも良いので、
open(LOCK,"> $lockfile") or die ~
というように上書きモードで開いて良いとする解説を読んだので、そのようにしています。
しかし、ごくたまにロックファイルが消えてしまう現象が発生します(なかなか再現できずに条件など特定できず)。
あくまでもファイルの中身が壊れるとかいうことではなくて、ファイルそのものが消えます。
そこでお聞きしたいのですが、
1.
ロックをかけたファイルが何らかの原因で消えた場合、ロック状態も消失してしまう(他プロセスがロックできてしまう)のでしょうか?
試してみたのですが、
まずプロセスAがロックをかけて
プロセスBが同ファイルにロックをかけようとすると、失敗する
プロセスAがロック解除せずにファイルを削除する
それでもプロセスBはロックに失敗する
プロセスAが(もう存在しないファイルの)ロックを解除(close)する
するとプロセスBはロックに成功する
ということは分かったのですが、上記を、プロセスAがファイルを削除した後にプロセスBを動かすと、どういうわけかロックに成功してしまいます。
2.
複数プロセスが同時に上書きモードでopenしようとするのが消える原因なら、ロックファイルであってもやはり読み書きモードで開くべきなのでしょうか。そしてそれなら消えることは無いのでしょうか。
(読み込みモードではロックできないという解説もありました。)
御教授のほどよろしくお願いいたします。