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
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