Bash Pagina 103: Diferență între versiuni
Admin (discuție | contribuții) Fără descriere a modificării |
Admin (discuție | contribuții) |
||
(Nu s-au afișat 2 versiuni intermediare efectuate de același utilizator) | |||
Linia 1: | Linia 1: | ||
== Semnale și capcane (traps) == | == Semnale și capcane (traps) == | ||
'''Ce este ''trap''?''' | |||
`trap` este o comandă încorporată în Bash, utilizată pentru a răspunde la semnalele trimise unui proces. Un semnal este o notificare trimisă unui proces pentru a-l informa despre un eveniment, permițând procesului să gestioneze acțiuni de întrerupere, ieșire sau alte evenimente predefinite. | |||
* Semnale comune | |||
- ''SIGINT'': Semnal de întrerupere (de exemplu, apăsarea `CTRL+C` în terminal pentru a opri un proces). | |||
- ''EXIT'': Un semnal special în Bash care este declanșat atunci când procesul se încheie, oferind o modalitate de a executa curățări sau alte acțiuni finale. | |||
[[Bash_Pagina_102|Pagina anterioară]] | [[ | `trap` permite gestionarea acestor semnale și implementarea de acțiuni personalizate care se declanșează automat la primirea unui semnal specific. | ||
* Exemplu de capcană EXIT | |||
`EXIT` este un semnal special care asigură execuția unei comenzi la finalizarea procesului shell. Acesta este util, de exemplu, pentru curățarea resurselor la ieșirea din script: | |||
trap "echo 'Curățare finală înainte de ieșire'; rm -f /tmp/tempfile" EXIT | |||
* Afișați o listă de nume de semnal și numerele acestora. Puteți afișa lista completă a semnalelor și a numerelor acestora folosind comanda: | |||
kill -l | |||
* Capcană de bază pentru curățarea fișierelor | |||
O capcană de curățare ajută la eliminarea fișierelor temporare sau a altor resurse: | |||
trap "rm -f /tmp/tempfile" EXIT | |||
Această comandă va elimina /tmp/tempfile la finalizarea procesului, indiferent dacă scriptul a rulat cu succes sau s-a încheiat anticipat. | |||
* Utilizarea capcanelor pentru a asigura disponibilitatea serviciului | |||
Capcanele pot fi utilizate pentru a preveni opririle necontrolate ale unui serviciu. De exemplu: | |||
trap "systemctl restart myservice" SIGHUP SIGINT SIGTERM | |||
Această configurație va reporni myservice dacă scriptul primește un semnal de oprire, astfel încât serviciul să rămână activ. | |||
* Utilizarea unei funcții într-un apel de capcană | |||
Capcanele pot apela funcții personalizate pentru a executa acțiuni complexe: | |||
clean_up() { | |||
echo "Curățare resurse..." | |||
rm -f /tmp/tempfile | |||
} | |||
trap clean_up EXIT | |||
În acest exemplu, funcția clean_up este apelată atunci când scriptul primește un semnal EXIT, asigurând curățarea fișierului temporar. | |||
[[Bash_Pagina_102|Pagina anterioară]] | [[Bash_Pagina_104|Următoarea pagină]] |
Versiunea curentă din 30 octombrie 2024 13:02
Semnale și capcane (traps)
Ce este trap?
`trap` este o comandă încorporată în Bash, utilizată pentru a răspunde la semnalele trimise unui proces. Un semnal este o notificare trimisă unui proces pentru a-l informa despre un eveniment, permițând procesului să gestioneze acțiuni de întrerupere, ieșire sau alte evenimente predefinite.
- Semnale comune
- SIGINT: Semnal de întrerupere (de exemplu, apăsarea `CTRL+C` în terminal pentru a opri un proces). - EXIT: Un semnal special în Bash care este declanșat atunci când procesul se încheie, oferind o modalitate de a executa curățări sau alte acțiuni finale.
`trap` permite gestionarea acestor semnale și implementarea de acțiuni personalizate care se declanșează automat la primirea unui semnal specific.
- Exemplu de capcană EXIT
`EXIT` este un semnal special care asigură execuția unei comenzi la finalizarea procesului shell. Acesta este util, de exemplu, pentru curățarea resurselor la ieșirea din script:
trap "echo 'Curățare finală înainte de ieșire'; rm -f /tmp/tempfile" EXIT
- Afișați o listă de nume de semnal și numerele acestora. Puteți afișa lista completă a semnalelor și a numerelor acestora folosind comanda:
kill -l
- Capcană de bază pentru curățarea fișierelor
O capcană de curățare ajută la eliminarea fișierelor temporare sau a altor resurse:
trap "rm -f /tmp/tempfile" EXIT
Această comandă va elimina /tmp/tempfile la finalizarea procesului, indiferent dacă scriptul a rulat cu succes sau s-a încheiat anticipat.
- Utilizarea capcanelor pentru a asigura disponibilitatea serviciului
Capcanele pot fi utilizate pentru a preveni opririle necontrolate ale unui serviciu. De exemplu:
trap "systemctl restart myservice" SIGHUP SIGINT SIGTERM
Această configurație va reporni myservice dacă scriptul primește un semnal de oprire, astfel încât serviciul să rămână activ.
- Utilizarea unei funcții într-un apel de capcană
Capcanele pot apela funcții personalizate pentru a executa acțiuni complexe:
clean_up() { echo "Curățare resurse..." rm -f /tmp/tempfile } trap clean_up EXIT
În acest exemplu, funcția clean_up este apelată atunci când scriptul primește un semnal EXIT, asigurând curățarea fișierului temporar.