Gestionarea proceselor în Linux

Procesul - o abstractizare utilizată pentru a descrie derularea programului. Procesul este un obiect sistem care poate fi controlat printr-o manipulare memorie de program, procesorul central și resursele de intrare-ieșire. În sistemele de operare a proceselor de sistem și utilizatori Linux și Unix sunt guvernate de aceleași reguli, astfel încât controlul este efectuat cu un singur set de instrucțiuni.

Structura de date nucleu stochează toate tipurile de informații despre fiecare proces. Cele mai importante includ:

  • tabel de alocare de memorie
  • Statutul actual (active, suspendate, se execută, etc.)
  • prioritate
  • informaţii de resurse
  • Informații despre fișiere și porturi de rețea proces deschis
  • Semnale masca (înregistrare a ceea ce semnalele blocate)
  • numele procesului proprietarului

fluxul de execuție, denumit în mod obișnuit ca un flux este rezultatul ramificare în procesul de execuție. Feed moștenește multe dintre atributele procesului său, și în același proces poate fi realizată simultan (în paralel) fluxuri multiple - un astfel de model de execuție numite multi-threading. In sistemele mai vechi, uniprocesor execuția în paralel a simulat nucleu, dar în arhitecturi multi-core și multi-procesor fluxuri pot fi efectuate simultan în diferite nuclee. aplicații multi-threaded, cum ar fi BIND si Apache, profita din plin de sisteme multi-core, deoarece aceste aplicații pot ocupa simultan mai multe solicitări.

Atributele procesului

Kernel-ul atribuie un identificator unic pentru fiecare proces PID. PID - uploadat ID. Majoritatea comenzilor și a apelurilor de sistem, de lucru cu procese care necesită să specificați un identificator specific care a fost clar contextul de funcționare. ID-urile sunt atribuite în ordine în ceea ce privește crearea de procese.

De asemenea, nu la UNIX, Linux nu are nici un apel de sistem, care ar iniția un nou proces pentru un anumit program. Pentru a genera un nou proces, procesul actual trebuie să se cloneze. Clona poate înlocui alt program executabil.

În timpul funcționării procesul inițial de clonare se numește părinte, și clona lui - copil. În plus față de identificatorul său, fiecare proces copil are atributul PPID (Parent uploadat ID), care coincide cu identificatorul procesului său de copil dat naștere. Este demn de remarcat faptul că PPID - informații foarte utile în cazul în care aveți de-a face cu procesele necunoscute. Tracing originile procesului poate facilita înțelegerea scopului și semnificația sa.

Când sistemul pornește, kernel-ul în sine a început mai multe procese. Cele mai importante dintre ele - init daemon. a cărui identitate este întotdeauna 1. daemon de inițializare este responsabil pentru executarea de script-uri de pornire. Toate procesele cu excepția celor care sunt create de kernel, sunt descendenți ai daemon init.

UID (User ID) - este ID-ul utilizatorului care a creat procesul. Schimbarea atributele procesului nu poate fi decât creatorul său (proprietar) și superuser. EUID (UID efectiv) - acesta este identificatorul de utilizator actual al procesului proiectat pentru a determina care resursele și fișierele procesul are acces la acest moment. Pentru cele mai multe programe, valorile UID și EUID sunt aceleași. Excepția este programul în care identificatorul de utilizator setat biți schimbare (setuid).

GID (Group ID) - aceasta este identificatorul grupului căruia îi aparține proprietarul procesului. identificator de grup curent (Egid) TIS asociate cu atributul precum valoarea asociată cu EUID UID.

Prioritatea procesului determină cât de mult din timpul CPU devine program. Nucleul foloseste un algoritm dinamic de calcul cu prioritate, luând în considerare cât de mult timp CPU a folosit procesul și cât timp așteaptă rândul său.

Ciclul de viață al procesului

Crearea unui proces - un proces de tranziție de la starea „Nou“ pentru a „Ready“. La momentul procesului de creare a sistemului de operare pregătește structura de date pentru el. Noul proces este atribuit propriul său PID, și controlul resurselor este realizată independent de mamă. Faptul că există procesul - nu-i dă dreptul de a utiliza resursele CPU.

Gestionarea proceselor în Linux

proces Ready dispune de toate resursele necesare și așteaptă până când planificatorul sistem îi va da acces la CPU. Când selectați un proces de acces este pornit și devine activ (funcționare).

Din „Run“ de stat, există două moduri:

  1. Timeout - procesul lucrat și eliberat resursele CPU (deconectata)
  2. În așteptare - procesul de pus în așteptare, care așteaptă un semnal

În cazul în care procesul se efectuează apelurile de sistem care nu pot fi realizate imediat, kernel-ul îl pune în modul standby (repaus). Procesul de așteptare este de așteptare pentru un anumit eveniment are loc, dacă fluxul de date de la terminalul sau de conexiunea la rețea. Multe daemon sistem petrec în această stare cea mai mare parte a timpului. Este important de menționat că, în acest caz, procesul va continua să fie stocate în memorie.

Unele operații ale procesului de traducere într-o stare de standby continuu (suspendat). În această stare, procesul așteaptă anumite semnale de la hardware-ul și nu răspunde la alte semnale. Când acest proces este descărcat din RAM pe hard disk (de swap-secțiune). Pentru a scapa de un astfel de proces este necesar pentru a elimina le-a dat naștere unei probleme sau a reporni sistemul.

Odată ce procesul este finalizat - este distrus.

Zombies - este un proces care a terminat de executare, însă această informație nu este încă disponibilă pentru procesul părinte. Procesul de la sfârșitul anului eliberează toate resursele (cu excepția PID) și devine un „zombie“ - o intrare gol în tabelul de proces care stochează codul complet la procesul părinte.

Gestionarea proceselor în Linux

Toate procesele sunt în coada de așteptare în executarea comenzii. Cu toate acestea, există mai multe faze, în funcție de stadiul procesului: coada gata și coada este blocată. La sfârșitul procesului de lucru se mută la partea de sus a cozii și din nou, așteptând momentul său de a accesa resursele CPU.

Gestionarea proceselor în Linux

Lucrul cu procesele de pe Linux

utilizator @ ubuntu $ ps aux

O cheie este utilizat pentru a afișa toate procesele, x cheie - indică procesele deconectate de la terminal, u cheie - permite filtrarea după numele sau ID-ul utilizatorului care a început programul.

Gestionarea proceselor în Linux

Valoarea coloanei la ieșirea din aux comanda ps:

  1. USER - numele proprietarului de proces
  2. PID - procesul ID
  3. CPU% - cota de timp CPU, care este cheltuit pe proces (procente)
  4. % MEM - Memoria real, care este cheltuit pe acest proces (ca procent)
  5. VSZ - dimensiunea procesului virtuale
  6. RSS - numărul de pagini de memorie
  7. TTY - identificator al terminalului de control
  8. STAT - process status curent (R-executat, D-așteaptă recorder disc, S-inactiv, T-suspendat, Z-zombies)
  9. TIME - cantitatea de timp CPU petrecut pe executarea procesului
  10. COMMAND - numele și argumente de comandă

Următorul spectacol prescurtat rezultatele PS munca in echipa laxe. Fiți atenți la câmpuri suplimentare ppid (părinte proces ID), NI (factorul de conformitate), WCHAN (resurse, care este de așteptat proces).

Gestionarea proceselor în Linux

NI reprezintă, în esență, procesul de prioritate. Inferioară valorii - prioritatea va fi executat de către un procesor. Intervalul de valori -20-20.

Este foarte convenabil să caute ID-ul de proces folosind comanda ps ligamente și grep. PS afișează o listă de procese, apoi transferă controlul la comanda grep, care la rândul său selectează din lista procesul dorit. Exemplu: pentru a găsi procesul de cron PID.


După cum sa văzut PID egal cu 879 proces cron.

comanda ps poate face doar o singură dată „instantaneu“ al sistemului. Pentru procesele care utilizează comanda de urmărire dinamică superioară.

Gestionarea proceselor în Linux

Procesele cele mai active sunt pe partea de sus. Top afișează statisticile de comandă cu privire la stadiul procesului, cantitatea de resurse utilizate de către CPU și RAM.

Semnale - Aceste cereri de întrerupere, puse în aplicare la nivelul proceselor.

Când se recepționează semnalul, una dintre cele două variante de evenimente. În cazul în care procesul este atribuit o rutină de procesare a semnalului, după apel oferă informații despre contextul în care a fost generat semnalul. În caz contrar, kernel-ul efectuează acțiuni în numele implicit proces. Aceste acțiuni depind de semnal, iar în unele cazuri chiar și a crea o imagine de memorie.

utilitară benă de memorie - este un fișier care conține memoria de imagine de proces

Procedura de tratare a apelurilor este numit semnal de interceptare. Când handler de execuție este terminată, procesul se reia din punctul în care a fost primit semnalul.

Pentru unele semnale au fost primite în program poate fi setat pentru a le ignora și blocarea. Ignorat semnalul este ignorat și nu afectează funcționarea procesorului. semnal de blocare este în coada de așteptare pentru procesare, dar kernel-ul nu are nevoie de nici o acțiune pentru a procesa semnalul de deblocare explicit.

Definit de peste treizeci de semnale diferite, iar acestea sunt aplicații foarte diferite. Cele mai frecvente dintre ele:

  1. KILL - finalizarea necondiționată a nivelului kernel-
  2. STOP - oprește procesul de executare
  3. CONT - reia procesul de execuție
  4. TSTP - generat prin apăsarea CTRL + Z, suspendă procesul de utilizare
  5. TERMEN - o cerere de completare a programului (de curățare realizează de proces și în mod normal, completeaza)
  6. QUIT - la fel ca și termenul + creează o imagine de memorie
  7. HUP - comanda de resetare
  8. BUS - Eroare de autobuz (indicând acces necorespunzătoare de memorie)
  9. SEGV - eroare de segmentare (indicând accesul neautorizat de memorie)

KILL și semnalele de oprire nu pot fi interceptate sau blocate sau ignorate.

ucide comanda este folosit pentru a trimite semnale de la procese. Kill are următoarea sintaxă:

utilizator @ ubuntu $ ucide [-Signal] PID

De exemplu, distruge procesul de cron. Anterior, am constatat că PID sa = 879.

utilizator @ ubuntu $ ucide -kill 879

După cum puteți vedea procesul de cron a fost eliminat. Semnalele de tip ucide ar trebui să fie trimise la superuser. De asemenea, înainte de a ucide cron am eliminat linia de respawn în cron.conf fișierul de configurare, care este folderul /etc/init/cron.conf.

În cele din urmă am să vă spun despre un lucru mai interesant. Upstart - acest sistem de inițializare sistem de operare care gestionează daemon de pornire în timpul pornirii sistemului. Fișierele de configurare Upstart magazin în / etc / init. Există mai multe comenzi pentru lucrul cu Upstart.

utilizator @ starea ubuntu $ [Numele procesului] - starea procesului

utilizator @ ubuntu $ începe [Numele procesului] - începe procesul de

utilizator @ ubuntu $ oprire [Numele procesului] - a opri procesul

utilizator @ ubuntu $ Restart [nume proces] - reluarea procesului

articole similare