01.12.2012 Views

Introducere în Linux Un ghid la îndemână - "Tille" Garrels

Introducere în Linux Un ghid la îndemână - "Tille" Garrels

Introducere în Linux Un ghid la îndemână - "Tille" Garrels

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

În câteva cazuri, init devine părinte al unui proces chiar dacă acest proces copil nu este pornit de<br />

init, după cum se vede <strong>în</strong> exemplul pstree. Multe programe, de exemplu, transformă (daemonize) procesele<br />

pornite de ele (procesele-copil) <strong>în</strong> servicii, pentru ca ele să poată ru<strong>la</strong> şi după ce procesul-părinte se opreşte<br />

sau este oprit. Administratorul de ferestre este exemplul tipic; el porneşte un proces xterm care generează o<br />

consolă <strong>în</strong> care puteţi introduce comenzi. Apoi administratorul de ferestre respinge orice responsabilitate<br />

ulterioară şi pasează procesul copil către init. Prin folosirea acestui mecanism, administratorii de ferestre pot<br />

fi schimbaţi fără <strong>în</strong>treruperea aplicaţiilor <strong>în</strong> desfăşurare.<br />

Câteodată lucrurile pot merge prost, chiar <strong>în</strong> familiile bune. În cazuri extrem de rare, un proces<br />

poate fi stopat <strong>în</strong>ainte ca părintele care l-a pornit să aştepte completarea ciclului normal. <strong>Un</strong> astfel de proces<br />

terminat anormal, ne<strong>în</strong>gropat, se numeşte zombie.<br />

4.1.5.2. Terminarea proceselor<br />

Când un proces se termină normal (nu este omorât, stopat – killed sau <strong>în</strong>trerupt pe neaşteptate),<br />

programul returnează părintelui semnalul de ieşire – exit status. Acest semnal este un număr returnat de<br />

program care conţine informaţii despre execuţia sarcinii. Sistemul prin care se returnează informaţii despre<br />

execuţia sarcinilor are originile <strong>în</strong> limbajul de programare C, <strong>în</strong> care a fost scris UNIX-ul.<br />

Codurile de ieşire returnate pot fi interpretate de procesele părinte sau <strong>în</strong> scripturi. Valorile acestor<br />

coduri sunt specifice fiecărui program. Aceste informaţii pot fi găsite de obicei <strong>în</strong> paginile man ale<br />

programelor <strong>în</strong> cauză, programul grep returnând, de exemplu, -1 dacă nu este găsită nici o potrivire, pe<br />

baza căruia este afişată linia care conţine masajul „No files found” - „Nu am găsit nici un fişier”. <strong>Un</strong> alt<br />

exemplu este cel al comenzii proprii consolei Bash, true, care nu face nimic <strong>în</strong> afară de returnarea<br />

semnalului de ieşire 0, al cărui <strong>în</strong>ţeles este <strong>în</strong>cheierea cu succes.<br />

4.1.5.3. Semnale<br />

Procesele se termină deoarece ele primesc un semnal. Sunt multe semnale pe care le puteţi trimite<br />

unui proces. Folosiţi comanda kill pentru a trimite semnale proceselor. Comanda kill -l arată o listă care<br />

conţine mai multe semnale. Cele mai multe sunt folosite de sistem pentru uzul intern sau de programatori<br />

atunci când scriu coduri. Ca utilizator, veţi avea nevoie de următoarele semnale:<br />

Tabelul 4-2. Semnale comune<br />

Numele semnalului Numărul semnalului Înţelesul semnalului<br />

SIGTERM 15 Termină procesele <strong>în</strong>tr-o manieră ordonată.<br />

SIGINT 2<br />

SIGKILL 9<br />

Întrerupe procesele. <strong>Un</strong> proces poate să ignore acest<br />

semnal.<br />

Întrerupe procesele. <strong>Un</strong> proces poate să ignore acest<br />

semnal.<br />

SIGHUP 1 Pentru servicii: reciteşte fişierele de configurare.<br />

Puteţi citi mai multe despre acţiunile implicite care sunt aplicate unui proces prin trimiterea unui<br />

semnal <strong>în</strong> man 7 signal.<br />

4.1.6. SUID şi SGID<br />

După cum am promis <strong>în</strong> capitolul anterior, vom discuta modurile speciale SUID şi SGID mai <strong>în</strong><br />

detaliu. Aceste moduri există pentru a oferi utilizatorului obişnuit posibilitatea de a executa sarcini pe care, <strong>în</strong><br />

mod normal, nu ar putea să le <strong>în</strong>deplinească din cauza sistemului de permisiuni asociate fişierelor pe<br />

sistemele asemănătoare cu UNIX-ul. În situaţia ideală, modurile speciale sunt utilizate cât mai rar, <strong>în</strong>trucât<br />

ele includ riscuri legate de securitatea sistemului. Dezvoltatorii <strong>Linux</strong> au <strong>în</strong>cercat să le evite pe cât de mult<br />

posibil. Versiunea pentru <strong>Linux</strong> a comenzii ps, de exemplu, foloseşte informaţia stocată <strong>în</strong> fişierul /proc,<br />

care este accesibilă tuturor, prin aceasta evitându-se expunerea datelor confidenţiale şi a resurselor. Înainte<br />

de asta şi <strong>în</strong>că va<strong>la</strong>bil pentru sistemele UNIX mai vechi, programul ps avea acces <strong>la</strong> fişiere precum<br />

/dev/mem şi /dev/kmem, dezavantajul major fiind legat de permisiunile asociate lor şi deţinătorii acestor<br />

fişiere, după cum se poate observa din exemplul de mai jos:<br />

72

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!