Questo è il comando with-lock-ex che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici workstation online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS
PROGRAMMA:
NOME
with-lock-ex - archivio di file
SINOSSI
con-lock-ex -w|-q|-f file di blocco command args ...
DESCRIZIONE
with-lock-ex aprirà e bloccherà il file di blocco per la scrittura e quindi alimenterà il resto di
i suoi argomenti a exec(2); quando quel processo termina, fd verrà chiuso e il file
sbloccato automaticamente dal kernel.
Se il file non esiste viene creato, con i permessi rw per ogni classe utente per
che ha l'umask w.
VERSIONI
-w Attendi che il lucchetto sia disponibile.
-f Fail (stampa di un messaggio su stderr e uscita da 255) se il blocco non può essere acquisito
immediatamente perché ce l'ha un altro processo.
-q Non fare nulla in silenzio (ad esempio, esci da 0 invece di eseguire il processo specificato) se il
lock non può essere acquisito immediatamente perché ce l'ha un altro processo.
STALE SERRATURE
Il protocollo di blocco utilizzato non soffre di blocchi obsoleti. Se il blocco non può essere
acquisito, uno o più processi in esecuzione devono attualmente mantenere il blocco; se la serratura deve
essere liberati quei processi dovrebbero essere uccisi.
In nessun caso devono essere istituiti cron job di "pulizia serrature obsolete" o simili.
Nei sistemi in cui possono esistere molti blocchi, i vecchi file di blocco possono essere rimossi da cron ma
solo se ogni lock viene acquisito prima della rimozione del lockfile, ad esempio con
con-lock-ex -q file di blocco rm file di blocco
DEADLOCK
Non c'è rilevamento del deadlock. In un sistema con più blocchi, una gerarchia di blocchi dovrebbe
essere stabilito, in modo che per ogni coppia di serrature A ed B che un processo potrebbe bloccare
contemporaneamente, sia A>B or B>A dove la relazione > è transitiva e non ciclica.
Quindi, per ogni due serrature X ed Y con X>Y è vietato acquisire X mentre si tiene Y.
Invece, acquisisci X prima, o rilasciare Y prima di (ri)acquisire X ed Y in questo ordine.
(Ci sono modi più complicati per evitare i deadlock, ma una gerarchia di lock è semplice da
comprendere e attuare. Se non soddisfa le tue esigenze, consulta la letteratura.)
BLOCCAGGIO PROTOCOLLO
Il protocollo di blocco utilizzato da con-lock-ex è il seguente:
Il blocco è mantenuto da un processo (o gruppo di processi) che contiene un blocco esclusivo fcntl
sul primo byte del file normale che ha il nome specificato. Un detentore della serratura
(e solo un detentore del lock) può cancellare il file o cambiare l'inode a cui il nome
fa riferimento, e non appena lo fa cessa di tenere il lucchetto.
Qualsiasi processo può creare il file se non esiste. Non è necessario che il file
contenere dati reali. In effetti, l'utilizzo del file per l'archiviazione dei dati è fortemente
sconsigliato, poiché ciò precluderà la maggior parte delle strategie per un aggiornamento affidabile. Usare un
lockfile separato invece.
La possibilità di ottenere il blocco corrisponde al permesso di scrittura sul file (e ovviamente
permesso di creare il file, se non esiste già). Tuttavia, i processi con
solo il permesso di lettura sul file può impedire del tutto l'acquisizione del blocco; perciò
i file di blocco di solito non dovrebbero essere leggibili da tutti.
Quando un (gruppo di) processi desidera acquisire il blocco, dovrebbe aprire il file (con
O_CREA) e bloccarlo con fctl(2) F_RWLCK, operazione F_SETLK or F_SETLKW. Se questo
ha successo, dovrebbe fstat il descrittore di file che ha e il file dal suo percorso. Se la
device e inode corrispondono allora il lock è stato acquisito e rimane acquisito fino a quel momento
gruppo di processi cambia il file a cui fa riferimento il nome, elimina il file o rilascia
il blocco fcntl. In caso contrario, un altro processo ha acquisito il blocco e ha eliminato il
file nel frattempo; ora devi chiudere il descrittore di file e ricominciare. con-lucchetto-
ex segue questa specifica.
Si noti che gregge(2) è un diverso tipo di serratura a fctl(2). con-lock-ex usa fctl.
Utilizzare con-lock-ex online utilizzando i servizi onworks.net