GNU/Linux >> Linux の 問題 >  >> Linux

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

ファイル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つ 両方のファイルにロックを適用して、特定の時間に書き込みできるプロセスを決定します。


Linux
  1. プロセス置換とパイプ?

  2. Bashのファイルでアトミック書き込み操作を実行しますか?

  3. 実行中のプロセスの環境を変更しますか?

  1. 同じが実行されている場合はプロセスを確認しますか?

  2. Linux で実行中のプロセスのダンプ ファイルを作成するにはどうすればよいですか?

  3. 実行中のプロセスが属するグループを特定する

  1. プロセスが常に実行されていることを確認しますか?

  2. 別のファイルに書き込む方法は?

  3. Linux プロセスのメモリをファイルにダンプする