GNU/Linux >> Linux Esercitazione >  >> Linux

Impedire il processo già in esecuzione per scrivere su un file esistente?

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.


Linux
  1. Garantire che un processo sia sempre in esecuzione?

  2. Cambiare l'ambiente di un processo in esecuzione?

  3. Verificare il processo se lo stesso è in esecuzione?

  4. Scrivi tutto Tmux Scorri indietro su un file?

  5. Permessi dei file in Linux – Lettura/Scrittura/Esegui

Come elencare i processi in esecuzione in Linux

Bash:Scrivi su file

Processi in esecuzione

Come controllare lo stato di avanzamento dell'esecuzione di Cp?

Come eseguire un comando al termine di uno già in esecuzione esistente?

Determina in quali gruppi si trova un processo in esecuzione?