GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bereits laufenden Prozess daran hindern, in eine vorhandene Datei zu schreiben?

Ich habe einen Prozess P, der Inhalte in eine Datei F schreibt. Ich muss in der Lage sein, P dynamisch zu aktivieren/deaktivieren, um in F zu schreiben. Ich habe versucht, die Berechtigungen für den Benutzer/die Gruppe zu ändern, aber dazu muss der Prozess neu gestartet werden (tatsächlich das ganze System).
Am Ende sollte ich in der Lage sein, ein „Skript“ auszuführen, das Folgendes tut:

EnablePWriteF  
sleep 10  
DisablePWriteF  

und als Ergebnis wird P in den ersten 10 Sekunden schreiben können und danach nicht mehr. Ich verwende die Debian-Distribution.

Ist das möglich?

Update:
Der eigentliche Anwendungsfall ist, dass ich versuche, einen bestimmten Prozess zu filtern, um in eine bestimmte Gerätedatei /dev/fb0 zu schreiben.
Ich habe zwei Prozesse, die in diese Datei schreiben, und das möchte ich auch in der Lage, genau einen der beiden zu bestimmen, der zu einem bestimmten Zeitpunkt in diese Datei schreiben darf, ohne die Prozesse beenden/stoppen zu müssen.

Akzeptierte Antwort:

Zumindest auf meiner Linux-Version sieht es so aus, als könnten Sie obligatorische Sperren verwenden. Ich habe es nur mit /dev/null getestet , aber ich sehe keinen Grund, warum es nicht mit anderen Geräten wie Ihren Framebuffern funktionieren sollte:

Als 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

Dann zum Beispiel mit perl und das File::FcntlLock Modul (oder direkt 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)

Lassen Sie einen Prozess das fb0-Gerät über fb0-for-process-A öffnen Datei und die andere über fb0-for-process-B und Sperren auf beide Dateien anwenden, um zu entscheiden, welcher Prozess zu einem bestimmten Zeitpunkt schreiben darf.


Linux
  1. Prozesssubstitution und Pipe?

  2. Sicherstellen, dass ein Prozess immer ausgeführt wird?

  3. Umgebung eines laufenden Prozesses ändern?

  4. Alle Tmux-Scrollbacks in eine Datei schreiben?

  5. Wie überprüfe ich den Fortschritt des Laufens von Cp?

So listen Sie laufende Prozesse in Linux auf

Bash:In Datei schreiben

Laufende Prozesse

Wie schreibe ich eine Datei in eine andere?

Auf Prozess prüfen, wenn dieser läuft?

Wie führe ich einen Befehl aus, nachdem ein bereits laufender, bestehender beendet wurde?