GNU/Linux >> Tutoriales Linux >  >> Linux

¿Evitar que el proceso ya se esté ejecutando para escribir en un archivo existente?

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.


Linux
  1. ¿Asegurarse de que un proceso esté siempre en ejecución?

  2. ¿Cómo escribir un archivo en otro?

  3. ¿Comprobar el proceso si se está ejecutando lo mismo?

  4. ¿Cómo verificar el progreso de la ejecución de Cp?

  5. Cómo redirigir la salida de un proceso que ya se está ejecutando

Cómo enumerar los procesos en ejecución en Linux

Bash:escribir en archivo

Procesos corriendo

Permisos de archivo en Linux:lectura/escritura/ejecución

¿Cómo ejecutar un comando después de que finalice uno existente que ya se está ejecutando?

¿Cómo puedo crear un archivo de volcado de un proceso en ejecución en Linux?