Unelte utilizator

Unelte site


kill_-9

Diferențe

Aceasta arată diferențele dintre revziile selectate și versiunea curentă a paginii.

Link către această vizualizare comparativă

kill_-9 [2008/05/31 20:10] (curent)
Linia 1: Linia 1:
 +====== A cui a fost ideea? ======
  
 +Mi-a atras atenţia faptul că un mare număr de utilizatori consideră că folosirea comenzii ''​kill -9''​ în orice circumstanţă este o idee grozavă. Cine sunt aceşti utilizatori şi cum au căpătat un astfel de obicei? Aş vrea să ştiu!
 +
 +====== Semnale ======
 +
 +În Unix există nişte lucruri numite semnale, şi care reprezintă o modalitate de exprimare a evenimentelor care apar în sistem. Sunt multe tipuri de semnale transmise unui proces, dintr-o gamă variată de motive. Când un proces primeşte un semnal, îl poate ignora sau îl poate "​capta"​ şi executa un o funcţie de tratare a semnalului, "​signal handler"​. Această operaţie poartă numele de "​captare"​. Semnalele care nu pot fi captate au o acţiune care în principiu se traduce ca "nu face nimic" sau "​exit"​. Două semnale nu pot fi captate: ''​SIGKILL''​ şi ''​SIGSTOP''​.
 +
 +Există o comandă numită ''​kill''​ care transmite un semnal unui proces.\\
 +''​kill -semnal pid''​ va transmite //semnal// la //pid//.\\
 +''​kill -l''​ va lista toate semnalele disponibile.
 +
 +Veţi observa că fiecare are un număr şi un nume simbolic. Sunt trei semnale folosite în mod obişnuit pentru a închide un proces: ''​SIGTERM''​ (15, terminate), ''​SIGINT''​ (2, interrupt), şi ''​SIGKILL''​ (9, kill, untrappable,​ "El Diablo"​).
 +
 +====== Închiderea proceselor ======
 +
 +Cele mai multe programe au nevoie de o anumită rutină când se închid. Aceste programe stabilesc o funcţie de tratare a semnalului pentru a face aceste sarcini de curăţare ca rezultat al ''​SIGTERM''​ sau ''​SIGINT''​. Ele ar folosi o astfel de funcţie şi pentru ''​SIGKILL''​ dacă ar putea, dar ''​SIGKILL''​ este un semnal ce nu poate fi captat.
 +
 +Dacă un program prinde semnalele ''​TERM''​ sau ''​INT'',​ atunci probabil că va şterge orice fişiere temporare, închide socketurile,​ elibera segmentele de memorie folosite, va închide fişierele deschise, sau va face alte operaţii. De exemplu, MySQL are nevoie să pună datele pe HDD şi să închidă fişierele din bazele de date. Închiderea MySQL cu ''​-9''​ va strica baza de date. Cele mai multe aplicaţii necesită în timpul lucrului fişiere temporare, iar folosirea ''​kill -9''​ pe aceste aplicaţii va lăsa aceste fişiere intacte. Daemonii de reţea au nevoie să îşi salveze corect logurile şi să închidă corect socketurile Internet astfel încât clienţii să nu rămână blocaţi. Închiderea unui web browser poate corupe colecţia de adrese, fişierele de cache, lăsa fişierele temporare în ''/​tmp''​ (îţi aminteşti de acel fisier mpeg de 20MB pe care ai dat click? da, încă se află în ''/​tmp''​)
 +
 +Folosirea ''​kill -9''​ este ca şi cum aţi apăsa butonul de Power al unui PC care funcţionează. Ştiţi deja că închiderea unui PC de la buton vă poate strica sistemul de fişiere din cauza datelor inconsistente folosite în modul de lucru, de ce aţi face acelaşi lucru cu o aplicaţie? Riscaţi exact aceeaşi corupere de date.
 +
 +====== HOWTO ======
 +
 +Astfel, deoarece este atât de important ca aplicaţiile să se închidă în mod corect, trebuie să urmaţi acestă procedură pentru a le închide:
 +
 +<​code>​kill pid (trimite semnalul TERM, aşteaptă 5 secunde)
 +kill pid (da, încearcă din nou, aşteaptă 5 secunde)
 +kill -INT pid (aşteaptă)
 +kill -INT pid (damn, still not dead?)
 +kill -KILL pid (acelaşi lucru cu -9)
 +kill -KILL pid (ceva este în neregulă)</​code>​
 +
 +Dacă procesul încă rulează, atunci nu-i mai trimiteţi semnale. Este fie prins în aşteptarea I/O fie Defunct. Folosiţi comanda ''​ps auxw | grep processname'',​ dacă vedeţi că este în starea D, atunci închideţi procesul părinte (a treia coloană dată de comanda ''​ps -ef''​ este pid-ul procesului părinte). Dacă este prins în aşteptarea I/O atunci sunt probleme mult mai complexe cu sistemul pe care îl aveţi. Cei mai mulţi utilizatori nu vor avea acestă problemă.
 +
 +[[http://​speculation.org/​garrick/​kill-9.html|Articolul original]]
 +
 +--- //[[adyx]] 2005/​04/​20//​
kill_-9.txt · Ultima modificare: 2008/05/31 20:10 (editare externă)