it-swarm.it

A cosa servono i file pid e lock?

Vedo spesso che i programmi specificano file pid e lock. E non sono del tutto sicuro di cosa facciano.

Ad esempio, durante la compilazione di nginx:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

Qualcuno può far luce su questo?

80
Stann

i file pid sono scritti da alcuni programmi per registrare il loro ID di processo durante l'avvio. Questo ha molteplici scopi:

  • È un segnale per altri processi e utenti del sistema che quel particolare programma è in esecuzione, o almeno avviato correttamente.
  • Permette di scrivere uno script davvero facile da controllare se è in esecuzione ed emettere un semplice comando kill se si desidera terminarlo.
  • È un modo economico per un programma di vedere se una sua precedente istanza in esecuzione non è stata chiusa correttamente.

La semplice presenza di un file pid non garantisce che quel particolare ID processo sia in esecuzione, ovviamente, quindi questo metodo non è sicuro al 100% ma "abbastanza buono" in molti casi. Controllare se un particolare PID esiste nella tabella dei processi non è totalmente portatile tra i sistemi operativi simili a UNIX a meno che non si desideri dipendere dall'utilità ps, che potrebbe non essere desiderabile chiamare in tutti i casi (e credo alcuni sistemi operativi simili a UNIX implementano ps in modo diverso comunque).

I file di blocco vengono utilizzati dai programmi per garantire che due istanze separate (ben educate) di un programma, che possono essere in esecuzione contemporaneamente su un sistema, non accedano a qualcos'altro allo stesso tempo. L'idea è prima che il programma acceda alla sua risorsa, controlla la presenza di un file di blocco e, se il file di blocco esiste, si verifica un errore o attende che scompaia. Quando non esiste, il programma che desidera "acquisire" la risorsa crea il file e quindi altre istanze che potrebbero verificarsi in seguito attenderanno che questo processo venga completato. Naturalmente, ciò presuppone che il programma "acquisendo" il blocco lo rilasci effettivamente e non dimentichi di eliminare il file di blocco.

Questo funziona perché il filesystem in tutti i sistemi operativi simili a UNIX applica serializzazione, il che significa che in realtà una sola modifica al filesystem avviene in un dato momento. Sorta di blocchi simili con database e simili.

90
LawrenceC

Questi file sono spesso usati dai demoni che dovrebbero essere eseguiti solo una volta su un sistema. Il file PID di solito contiene il numero ID processo del programma già avviato e in esecuzione, se presente. Inoltre, quando si avvia, crea il file di blocco. Finché esiste il file di blocco, non ne avvierà un altro senza l'intervento dell'utente. Se il file di blocco esiste e l'id di processo menzionato nel file pid non è in esecuzione, il daemon è considerato in uno stato "morto", il che significa che dovrebbe essere in esecuzione ma probabilmente non è dovuto a un arresto anomalo o a un arresto improprio . Ciò potrebbe avviare uno scenario speciale di avvio/riavvio per alcuni programmi. Spegnendolo correttamente si rimuoverà il file di blocco.

14
Caleb

Un file PID conterrà l'ID processo di un processo in esecuzione. Questo ha vari usi; puoi leggerlo e verificare che il processo sia ancora in esecuzione e intraprendere le azioni appropriate oppure leggerlo e terminare il processo.

Molto probabilmente un file di blocco è specifico dell'applicazione. I file di blocco vengono utilizzati per indicare che alcune risorse sono in uso e che il processo che richiede l'accesso deve attendere fino a quando la risorsa viene liberata prima di continuare.

8
user591