Semnalele de utilizator interceptării merge în

Semnalele de utilizator interceptării Go

Semnalele sunt mijloace limitate de comunicare între procese. Semnalele folosite pentru a întrerupe executarea programului și handler specific de răspuns. De exemplu, atunci când apăsați combinația de taste CTRL + C, terminalul pentru a opri rularea programului, astfel încât să trimită semnalul SIGINT. În general, în procesul de pregătire a semnalului SIGINT este ucis, dar unele procese pot intercepta semnalul și ignora sau pentru a efectua unele lucrări de pregătire înainte de a ieși. Un alt semnal SIGKILL destul de bine-cunoscut este mult mai „brutal“. Odată ce procesul primește acest semnal, acesta se închide imediat și nu există nici o modalitate de a ignora acest semnal. Sunt atât de multe semnale diferite, descrierea lor pot fi găsite pe wikipedia.

Trimiterea semnalelor prin intermediul procesului poate ucide comanda . Aici PID - este ID-ul de proces. De exemplu, pentru a finaliza un anumit proces, puteți trimite un semnal SIGKILL folosind comanda ucide -kill . Pentru comoditate, puteți utiliza comanda pkill, și în loc de un identificator pentru a specifica numele de proces.

În acest post vom vorbi despre semnale de utilizator specifice USR1 și USR2. Ambele aceste semnale sunt furnizate în totalitate la dispoziția dumneavoastră și puteți defini stivuitoare lor. Voi arăta câteva modalități populare de a le utiliza. Toate exemplele sunt scrise în limba de Go, dar ideea de bază nu depinde de limba selectată și poate fi realizovanna pe nimic.

interceptarea semnalelor

În Go, puteți intercepta semnalele folosind funcția signal.Notify (chan os.Signal, syscall.Signal). Această funcție ia canal și vă spune când perehvat semnal. În cazul în care programul primește un semnal, canalul este trimis valoare de tip os.Signal. Aproximativ se pare ca acest lucru:

Acum știm cum să intercepteze semnalele și de a determina propriile noastre stivuitoare.

Comutați la modul de logare.

Să ne imaginăm că aveți o aplicație web-based, care, desigur, scrie jurnalele. Asigurați-jurnal este foarte complet și verbose nu este considerat o idee foarte bună, deoarece fișierele jurnal va crește instantaneu. De aceea, vin cu diferite nivele de exploatare forestieră (INFO, DEBUG, WARN, etc.). Executați aplicația cu indicarea nivelului, dar dacă doriți otdebazhit care să fie problema, va trebui să reporniți aplicația care indică un alt nivel de logare.

Pentru simplificare, să presupunem că aveți doar două niveluri de logare (tăcut și verbose). Codul de mai jos comută nivelurile de exploatare forestieră, cât mai curând proces devine semnal USR1.

Vă reamintesc că aveți nevoie pentru a trimite un semnal pentru a executa comanda:

În acest exemplu, programul binar denumit semnale.

Citirea fișierelor de configurare.

O altă opțiune convenabilă de a utiliza semnale acestei supraincarcari fișiere de configurare fără a reporni aplicația. Imaginați-vă că aveți o aplicație care citește configurația dintr-un fișier YAML și pur și simplu afișează valorile configurației de pe ecran. Puțin modificat această aplicație, putem înlocui vechea configurație a noului pur și simplu prin trimiterea semnalului dorit.

concluzie

articole similare