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é.