すでに実行中のプロセスが既存のファイルに書き込むのを防ぐ

すでに実行中のプロセスが既存のファイルに書き込むのを防ぐ

ファイルFにコンテンツを書き込むプロセスPがある。 Fに書き込むには、Pを動的に有効/無効にできる必要があります。ユーザー/グループの権限を変更しようとしましたが、これによりプロセス(実際にはシステム全体)を再起動する必要がありました。最後に、以下を実行する「スクリプト」を実行できる必要があります。

EnablePWriteF  
sleep 10  
DisablePWriteF  

したがって、最初の10秒間Pに書き込むことができますが、それ以降は書き込めません。私はDebianディストリビューションを使用しています。

可能ですか?

アップデート:実際のユースケースは、特定のデバイスファイル/ dev / fb0に書き込むために特定のプロセスをフィルタリングしようとしていることです。そのファイルに書き込む2つのプロセスがあり、そのうちのどのプロセスを正確に決定できるようにしたいと思います。与えられた瞬間に2つのプロセスが許可されます。プロセスを終了/停止せずにファイルに書き込みます。

ベストアンサー1

少なくとも私のバージョンのLinuxでは、強制ロックを使用できるようです。私はそれを次の/dev/nullようにテストしました。

rootユーザーとして:

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

たとえば、perlandFile::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デバイスを開き、fb0-for-process-A別のプロセスfb0-for-process-Bを介して両方のファイルにロックを適用して、特定の時間にどのプロセスが書き込むことができるかを決定します。

おすすめ記事