Tengo un proceso P que escribe contenido en un archivo F. Necesito poder habilitar/deshabilitar dinámicamente P para escribir en F. Intenté cambiar los permisos para el usuario/grupo, pero esto requiere que se reinicie el proceso (de hecho todo el sistema).
Al final, debería poder ejecutar un "script" que haga lo siguiente:
EnablePWriteF
sleep 10
DisablePWriteF
y como resultado P podrá escribir durante los primeros 10 segundos y no después. Estoy usando la distribución Debian.
¿Es esto posible?
Actualización:
El caso de uso real es que estoy tratando de filtrar un proceso dado para escribir en un archivo de dispositivo específico /dev/fb0
Tengo dos procesos que están escribiendo en ese archivo y quiero ser capaz de determinar exactamente uno de los dos que puede escribir en ese archivo en un momento dado sin tener que matar/detener los procesos.
Respuesta aceptada:
Al menos en mi versión de Linux, parece que puede usar bloqueos obligatorios. Solo lo he probado con /dev/null
, pero no veo ninguna razón por la que no funcione con otros dispositivos como los búferes de fotogramas:
Como 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
Luego, por ejemplo, usando perl
y el File::FcntlLock
módulo (o hacerlo directamente 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)
Haga que un proceso abra el dispositivo fb0 a través de fb0-for-process-A
archivo, y el otro a través de fb0-for-process-B
y aplique bloqueo a ambos archivos para decidir qué proceso puede escribir en un momento dado.