Mám proces P, který zapisuje obsah do souboru F. Potřebuji být schopen dynamicky povolit/zakázat P pro zápis do F. Zkoušel jsem změnit oprávnění pro uživatele/skupinu, ale vyžaduje to restartování procesu (ve skutečnosti celý systém).
Nakonec bych měl být schopen spustit „skript“, který provede následující:
EnablePWriteF
sleep 10
DisablePWriteF
a výsledkem bude, že P bude moci psát prvních 10 sekund a poté už ne. Používám distribuci Debianu.
Je to možné?
Aktualizace:
Skutečným případem použití je, že se snažím filtrovat daný proces, aby zapisoval do konkrétního souboru zařízení /dev/fb0
Mám dva procesy, které zapisují do tohoto souboru a chci být schopen určit přesně jeden ze dvou, který má povoleno zapisovat do tohoto souboru v danou chvíli, aniž by bylo nutné zabíjet/zastavovat procesy.
Přijatá odpověď:
Alespoň na mé verzi Linuxu to vypadá, že možná budete moci používat povinné zámky. Testoval jsem to pouze s /dev/null
, ale nevidím žádný důvod, proč by to nefungovalo s jinými zařízeními, jako jsou vaše vyrovnávací paměti snímků:
Jako 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
Pak například pomocí perl
a File::FcntlLock
modul (nebo to proveďte přímo v 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)
Nechte jeden proces otevřít zařízení fb0 prostřednictvím fb0-for-process-A
soubor a druhý přes fb0-for-process-B
a aplikujte uzamčení na oba soubory, abyste rozhodli, který proces může v daný čas zapisovat.