私たちは/ tmpディレクトリにopen()を使ってファイルを作成し、フラグLOCK_EXを持つflock()を使ってファイルをロックするソケットサーバーを持っています。 LOCK_NB。 flock()の戻り値を確認し、エラーがEWOULDBLOCKの場合はソケットサーバーを終了します。戻り値が成功した場合、終了します。これは、常に1つのSocket Serverだけが常に実行されていることを確認するためです。なぜロックを作成したプロセスが終了したときにファイルのロックが削除されないのですか?
しかし、ロックを作成したプロセスが終了すると、ファイル上でロックが削除されないことがわかりました。したがって、その後のSocket Serverの起動(既存のSocket Serverプロセスが終了したとき)は、この理由により失敗します。ロックを作成したプロセスが終了し、この問題を解決する方法がある場合、ファイルのロックが削除されない理由を教えてください。
'man 2 flock'に記載されているすべての条件が満たされていますか?特に、開かれた状態でファイル記述子を保持しているforkされたプロセスがないことを確かめますか? (これをチェックするには 'lsof'または' fuser'を使用してください) – gudok
@gudokフロックチェックの後、fork()を使って子プロセスを作成しています。しかし、これらのプロセスはこのファイルを使用していません。 – kadina
私たちにコードを教えてください。私たちは見えないものをデバッグすることはできません。そして定義上、あなたはどこに問題があるのか分からないので、おそらく重要な点を除外しています。オープンした後で 'fork'すると、子プロセスはロックを解放する前にファイルを'閉じる '必要があります。 – kaylum