Bash Pagina 111

De la Wiki Linux Advanced
Versiunea din 30 octombrie 2024 17:48, autor: Admin (discuție | contribuții)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)
Sari la navigare Sari la căutare

Folosirea comenzii flock pentru a crea fișiere de blocare

Comanda `flock` funcționează pe descriptori de fișiere, nu direct pe fișiere. Un descriptor de fișier (FD) este un număr unic folosit pentru a accesa o resursă de date. Cei mai comuni descriptori de fișiere sunt:

- 0 - stdin: Intrare standard - 1 - stdout: Ieșire standard - 2 - stderr: Eroare standard

Un avantaj major al utilizării `flock` față de blocarea simplă prin fișier este capacitatea de a pune la coadă sau aștepta o blocare. În mod implicit, `flock` va aștepta la nesfârșit pentru a obține o blocare, dar poate fi utilizată opțiunea `-n` pentru blocare non-blocantă (în cazul în care dorim ca scriptul să nu aștepte și să încheie executarea dacă blocarea nu este disponibilă).

Exemplu: Creare fișier de blocare utilizând flock

Acest script deschide un fișier de blocare și, dacă blocarea este obținută, rulează codul în continuare. Dacă nu reușește să obțină blocarea, scriptul se va opri.

  • Script de blocare de bază:
#!/bin/bash
# Deschidem descriptorul 100 pentru fișierul de blocare
exec 100>/var/tmp/testlock.lock || exit 1
# Obținem o blocare exclusivă folosind descriptorul 100
flock 100 || exit 1
echo "Fac niște chestii..."
echo "Dorm 30 de secunde..."
sleep 30
  • Script de blocare cu timeout:

Acest script încearcă să obțină o blocare timp de 10 secunde. Dacă nu reușește să obțină blocarea în acest interval, scriptul se va opri.

#!/bin/bash
# Deschidem descriptorul 100 pentru fișierul de blocare
exec 100>/var/tmp/testlock.lock || exit 1
# Încearcă să obțină blocarea timp de 10 secunde
flock -w 10 100 || exit 1
echo "Fac niște chestii..."
echo "Dorm 5 secunde..."
sleep 5

Prin utilizarea flock, se asigură că un singur proces la un moment dat poate rula secțiunea protejată de blocare. Aceasta este esențială pentru evitarea condițiilor de cursă și a conflictelor în accesul la resursele partajate.

Aceste exemple clarifică utilizarea comenzii `flock` și evidențiază modul în care funcționează blocările cu timeout.


Pagina anterioară | Următoarea pagină