同期する 2 つのプロセスがあります。
プロセス A はルートとして実行され、特定のファイルに再入可能ロックを作成します。プロセス B は「通常の」ユーザーの下で実行されており、プロセス A によってロックが解除されるのを待つ必要があります。
多くの方法を試しましたが、ファイルのアクセス許可が間違っているため、機能しません。コードは次のとおりです: (in-VM-synchronisation-stuff を削除):
ロック:
FileChannel channel = new RandomAccessFile(pFile, "rw").getChannel();
lock = channel.tryLock();
ハズロック:
RandomAccessFile file = new RandomAccessFile(pFile, "rw");
FileChannel channel = file.getChannel();
FileLock lock = channel.tryLock();
if (lock == null) {
return true;
}
lock.release();
私が抱えている問題は、ロックが次のように作成されることです。
-rw-r--r--. 1 root root 0 May 7 21:42 lockfile.lock
ロックをチェックしようとすると (通常のユーザーとして実行されているプロセス B によって)、
java.io.FileNotFoundException: _lockfile_ (Permission denied)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:212)
ディレクトリをすべて g=rwx,o=rwx に umask しようとしましたが、これは無視されているようです。最初に setWritable(true, false) というファイルを作成しようとしましたが、これはリセットされているようです。動作する方法がありませんでした。hasLock で「rw」モードではなく「r」モードを使用しようとしましたが、ChannelNotWritableException が発生します。
したがって、主な質問は次のとおりです。作成されたロックファイルのアクセス許可にどのように影響を与えることができますか?
誰か提案がありますか?
よろしくマイケル