Ho un processo P che scrive il contenuto in un file F. Devo essere in grado di abilitare/disabilitare dinamicamente P per scrivere su F. Ho provato a modificare le autorizzazioni per l'utente/gruppo ma ciò richiede il riavvio del processo (in effetti l'intero sistema).
Alla fine dovrei essere in grado di eseguire uno "script" che fa quanto segue:
EnablePWriteF
sleep 10
DisablePWriteF
e di conseguenza P sarà in grado di scrivere per i primi 10 secondi e non dopo. Sto usando la distribuzione Debian.
È possibile?
Aggiornamento:
Il vero caso d'uso è che sto cercando di filtrare un determinato processo per scrivere su un file di dispositivo specifico /dev/fb0
Ho due processi che stanno scrivendo su quel file e voglio essere in grado di determinare esattamente uno dei due a cui è consentito scrivere su quel file in un dato momento senza dover interrompere/interrompere i processi.
Risposta accettata:
Almeno sulla mia versione di Linux, sembra che tu possa essere in grado di utilizzare i blocchi obbligatori. L'ho testato solo con /dev/null
, ma non vedo alcun motivo per cui non funzionerebbe con altri dispositivi come i frame buffer:
Come 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
Quindi, ad esempio, usando perl
e il File::FcntlLock
modulo (o fallo direttamente in 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)
Fai in modo che un processo apra il dispositivo fb0 tramite il fb0-for-process-A
file e l'altro tramite fb0-for-process-B
e applica il blocco a entrambi i file per decidere quale processo può scrivere in un dato momento.