Bash Pagina 111: Diferență între versiuni
Admin (discuție | contribuții) (Pagină nouă: Pagina anterioară | Următoarea pagină) |
Admin (discuție | contribuții) Fără descriere a modificării |
||
Linia 1: | Linia 1: | ||
== 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. | |||
[[Bash_Pagina_110|Pagina anterioară]] | [[Bash_Pagina_112|Următoarea pagină]] | [[Bash_Pagina_110|Pagina anterioară]] | [[Bash_Pagina_112|Următoarea pagină]] |
Versiunea curentă din 30 octombrie 2024 17:48
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.