GNU/Linux >> Tutoriels Linux >  >> Linux

Empêcher le processus déjà en cours d'écrire dans un fichier existant ?

J'ai un processus P qui écrit du contenu dans un fichier F. J'ai besoin de pouvoir activer/désactiver dynamiquement P pour écrire sur F. J'ai essayé de changer les autorisations pour l'utilisateur/groupe mais cela nécessite que le processus soit redémarré (en fait l'ensemble du système).
Au final, je devrais être capable d'exécuter un "script" qui fait ce qui suit :

EnablePWriteF  
sleep 10  
DisablePWriteF  

et par conséquent P pourra écrire pendant les 10 premières secondes et pas après. J'utilise la distribution Debian.

Est-ce possible ?

Mise à jour :
Le cas d'utilisation réel est que j'essaie de filtrer un processus donné pour écrire dans un fichier de périphérique spécifique /dev/fb0
J'ai deux processus qui écrivent dans ce fichier et je veux être capable de déterminer exactement l'un des deux qui est autorisé à écrire dans ce fichier à un moment donné sans avoir à tuer/arrêter les processus.

Réponse acceptée :

Au moins sur ma version de Linux, il semble que vous puissiez utiliser des verrous obligatoires. Je l'ai seulement testé avec /dev/null , mais je ne vois aucune raison pour laquelle cela ne fonctionnerait pas avec d'autres appareils comme vos tampons de trame :

En tant que 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

Ensuite, par exemple, en utilisant perl et le File::FcntlLock module (ou faites-le directement en 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)

Demandez à un processus d'ouvrir le périphérique fb0 via le fb0-for-process-A fichier, et l'autre via fb0-for-process-B et appliquez le verrouillage aux deux fichiers pour décider quel processus peut écrire à un moment donné.


Linux
  1. Substitution de processus et tuyau ?

  2. Effectuer des opérations d'écriture atomique dans un fichier dans Bash ?

  3. Comment écrire un fichier dans un autre ?

  4. Vérifier le processus si le même est en cours d'exécution ?

  5. Écrire tout le défilement Tmux dans un fichier ?

Comment répertorier les processus en cours d'exécution sous Linux

Bash :Écrire dans un fichier

Processus en cours d'exécution

Comment puis-je créer un fichier de vidage d'un processus en cours d'exécution sous Linux ?

Déterminez dans quel(s) groupe(s) se trouve un processus en cours d'exécution ?

Vider la mémoire d'un processus Linux dans un fichier