GNU/Linux >> Znalost Linux >  >> Linux

Zabránit již běžícímu procesu zápisu do existujícího souboru?

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.


Linux
  1. Ujistěte se, že proces vždy běží?

  2. Změnit prostředí běžícího procesu?

  3. Jak zapsat soubor do jiného?

  1. Zkontrolovat proces, pokud je stejný?

  2. Zapsat všechny rolování Tmux do souboru?

  3. Oprávnění souborů v Linuxu – čtení/zápis/spouštění

  1. Náhrada procesu a potrubí?

  2. Provádění operací atomového zápisu v souboru v Bash?

  3. Jak mohu vytvořit soubor výpisu běžícího procesu v Linuxu?