ファイルFにコンテンツを書き込むプロセスPがあります。Fに書き込むにはPを動的に有効/無効にできる必要があります。ユーザー/グループのアクセス許可を変更しようとしましたが、プロセスを再起動する必要があります(実際にはシステム全体)。
最終的には、次のような「スクリプト」を実行できるはずです。
EnablePWriteF
sleep 10
DisablePWriteF
その結果、Pは最初の10秒間は書き込み可能になり、その後は書き込みができなくなります。私はDebianディストリビューションを使用しています。
これは可能ですか?
更新:
実際の使用例は、特定のデバイスファイルに書き込むために特定のプロセスをフィルタリングしようとしていることです/ dev / fb0
そのファイルに書き込んでいる2つのプロセスがあり、プロセスを強制終了/停止することなく、特定の時点でそのファイルへの書き込みが許可されている2つのうちの1つを正確に判別できます。
承認された回答:
少なくとも私のバージョンのLinuxでは、必須のロックを使用できるようです。 /dev/null
でのみテストしました 、しかし、フレームバッファなどの他のデバイスで機能しない理由はわかりません:
ルートとして:
mount -t tmpfs -o mand locked-fb some-dir
cp -a /dev/fb0 some-dir/fb0-for-process-A
cp -a /dev/fb0 some-dir/fb0-for-process-B
chmod g+s some-dir/fb0-for-process-[AB] # enable mand-lock
次に、たとえば、perl
を使用します およびFile::FcntlLock
モジュール(またはCで直接実行):
#! /usr/bin/perl
use File::FcntlLock;
$l = new File::FcntlLock;
$l->l_type(F_RDLCK);
open my $fba, '<', 'some-dir/fb0-for-process-A' or die$!;
sleep 10; # writing OK
$l->lock($fba, F_SETLK); # writing blocked on fb0-for-process-A
sleep 10;
exit; # lock now released (or do an explicit unlock)
fb0-for-process-A
を介して1つのプロセスにfb0デバイスを開いてもらいます ファイル、およびfb0-for-process-B
を介したもう1つ 両方のファイルにロックを適用して、特定の時間に書き込みできるプロセスを決定します。