Tot ce trebuie să știți despre procesele din Linux [Ghid cuprinzător]


În acest articol, vom parcurge o înțelegere de bază a proceselor și vom analiza pe scurt cum să gestionăm procesele în Linux folosind anumite comenzi.

Un proces se referă la un program în execuție; este o instanță care rulează a unui program. Este alcătuit din instrucțiunile programului, date citite din fișiere, alte programe sau intrări de la un utilizator de sistem.

Tipuri de procese

Există fundamental două tipuri de procese în Linux:

  • Procesele din prim-plan (numite și procese interactive) – acestea sunt inițializate și controlate printr-o sesiune de terminal. Cu alte cuvinte, trebuie să existe un utilizator conectat la sistem pentru a începe astfel de procese; nu au pornit automat ca parte a funcțiilor/serviciilor sistemului.
  • Procesele de fundal (numite și procese neinteractive/automate) – sunt procese care nu sunt conectate la un terminal; nu se așteaptă la nicio intrare de utilizator.

Ce este Daemons

Acestea sunt tipuri speciale de procese de fundal care încep la pornirea sistemului și continuă să ruleze pentru totdeauna ca serviciu; ei nu mor. Ele sunt pornite ca sarcini de sistem (rulate ca servicii), spontan. Cu toate acestea, ele pot fi controlate de un utilizator prin procesul de init.

Crearea unui proces în Linux

Un proces nou este creat în mod normal atunci când un proces existent face o copie exactă a lui în memorie. Procesul copil va avea același mediu ca și părintele său, dar numai numărul ID-ului procesului este diferit.

Există două moduri convenționale utilizate pentru a crea un nou proces în Linux:

  • Utilizarea funcției System() – această metodă este relativ simplă, totuși, este ineficientă și prezintă anumite riscuri de securitate semnificative.
  • Folosirea funcției fork() și exec() – această tehnică este puțin avansată, dar oferă mai multă flexibilitate, viteză, împreună cu securitate.

Cum identifică Linux procesele?

Deoarece Linux este un sistem multi-utilizator, ceea ce înseamnă că diferiți utilizatori pot rula diverse programe pe sistem, fiecare instanță care rulează a unui program trebuie să fie identificată în mod unic de kernel.

Și un program este identificat prin ID-ul său de proces (PID), precum și prin ID-ul procesului părinte (PPID), prin urmare procesele pot fi clasificate în continuare în:

  • Procese părinte – acestea sunt procese care creează alte procese în timpul rulării.
  • Procese secundare – aceste procese sunt create de alte procese în timpul rulării.

Procesul Init

Procesul Init este mama (părintele) tuturor proceselor de pe sistem, este primul program care este executat la pornirea sistemului Linux; gestionează toate celelalte procese din sistem. Este pornit de nucleul însuși, deci în principiu nu are un proces părinte.

Procesul de pornire are întotdeauna un ID de proces de 1. Funcționează ca părinte adoptiv pentru toate procesele orfane.

Puteți folosi comanda pidof pentru a găsi ID-ul unui proces:

pidof systemd
pidof top
pidof httpd

Pentru a găsi ID-ul procesului și ID-ul procesului părinte al shell-ului curent, rulați:

echo $$
echo $PPID

Pornirea unui proces în Linux

Odată ce rulați o comandă sau un program (de exemplu cloudcmd – CloudCommander), acesta va începe un proces în sistem. Puteți începe un proces în prim-plan (interactiv) după cum urmează, acesta va fi conectat la terminal și un utilizator îl poate trimite:

cloudcmd

Joburi de fundal Linux

Pentru a începe un proces în fundal (non-interactiv), utilizați simbolul &, aici, procesul nu citește intrarea de la un utilizator până când este mutat în prim-plan.

cloudcmd &
jobs

De asemenea, puteți trimite un proces în fundal, suspendându-l folosind [Ctrl + Z], aceasta va trimite procesului semnalul SIGSTOP, oprindu-i astfel operațiunile; devine inactiv:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Pentru a continua să rulați comanda suspendată de mai sus în fundal, utilizați comanda bg:

bg

Pentru a trimite un proces de fundal în prim-plan, utilizați comanda fg împreună cu ID-ul jobului, astfel:

jobs
fg %1

S-ar putea să vă placă și: Cum să porniți comanda Linux în fundal și să detașați procesul în terminal

Stările unui proces în Linux

În timpul execuției, un proces se schimbă de la o stare la alta în funcție de mediul/circumstanțele sale. În Linux, un proces are următoarele stări posibile:

  • Rulează – aici fie rulează (este procesul curent din sistem) fie este gata de rulare (așteaptă să fie atribuit unuia dintre procesoare).
  • În așteptare – în această stare, un proces așteaptă să aibă loc un eveniment sau o resursă de sistem. În plus, nucleul diferențiază și două tipuri de procese de așteptare; procesele de așteptare întreruptibile – pot fi întrerupte de semnale și procesele de așteptare neîntreruptibilă – așteaptă direct în condiții hardware și nu pot fi întrerupte de niciun eveniment/semnal.
  • Oprit – în această stare, un proces a fost oprit, de obicei prin primirea unui semnal. De exemplu, un proces care este depanat.
  • Zombie – aici, un proces este mort, a fost oprit, dar încă are o intrare în tabelul de procese.

Cum să vizualizați procesele active în Linux

Există mai multe instrumente Linux pentru vizualizarea/listarea proceselor care rulează pe sistem, cele două tradiționale și bine cunoscute sunt comenzile ps și top:

1. Comanda ps

Afișează informații despre o selecție a proceselor active din sistem, după cum se arată mai jos:

ps 
ps -e | head 

2. sus – Instrument de monitorizare a sistemului

top este un instrument puternic care vă oferă o vizualizare dinamică în timp real a unui sistem care rulează, așa cum se arată în captura de ecran de mai jos:

top 

Citiți asta pentru mai multe exemple de utilizare de top: 12 exemple de comandă TOP în Linux

3. priviri – Instrument de monitorizare a sistemului

priviri este un instrument de monitorizare a sistemului relativ nou, cu funcții avansate:

glances

Pentru un ghid cuprinzător de utilizare, citiți: Glances – Un instrument avansat de monitorizare a sistemului în timp real pentru Linux

Există câteva alte instrumente utile de monitorizare a sistemului Linux pe care le puteți utiliza pentru a enumera procesele active, deschideți linkul de mai jos pentru a citi mai multe despre ele:

  1. 20 de instrumente de linie de comandă pentru a monitoriza performanța Linux
  2. 13 instrumente de monitorizare Linux mai utile

Cum să controlezi procesele în Linux

Linux are, de asemenea, câteva comenzi pentru controlul proceselor, cum ar fi kill, pkill, pgrep și killall, mai jos sunt câteva exemple de bază despre cum să le folosești:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Pentru a afla cum să utilizați aceste comenzi în profunzime, pentru a opri/încheia procesele active în Linux, deschideți linkurile de mai jos:

  1. Un ghid pentru comenzile Kill, Pkill și Killall pentru a termina procesul Linux
  2. Cum să găsiți și să omorâți procesele care rulează în Linux

Rețineți că le puteți folosi pentru a elimina aplicațiile care nu răspund în Linux atunci când sistemul dvs. se îngheață.

Trimiterea semnalelor către procese

Modul fundamental de a controla procesele în Linux este trimiterea de semnale către acestea. Există mai multe semnale pe care le puteți trimite unui proces, pentru a vedea toate semnalele rulate:

kill -l

Pentru a trimite un semnal unui proces, utilizați comenzile kill, pkill sau pgrep pe care le-am menționat mai devreme. Dar programele pot răspunde la semnale numai dacă sunt programate să recunoască acele semnale.

Și majoritatea semnalelor sunt pentru uz intern de către sistem sau pentru programatori atunci când scriu cod. Următoarele sunt semnale care sunt utile unui utilizator de sistem:

  • SIGHUP 1 – trimis unui proces atunci când terminalul său de control este închis.
  • SIGINT 2 – trimis unui proces de către terminalul său de control atunci când un utilizator întrerupe procesul apăsând [Ctrl+C].
  • SIGQUIT 3 – trimis unui proces dacă utilizatorul trimite un semnal de renunțare [Ctrl+D].
  • SIGKILL 9 – acest semnal termină (omorează) imediat un proces și procesul nu va efectua nicio operațiune de curățare.
  • SIGTERM 15 – acesta este un semnal de terminare a programului (kill îl va trimite implicit).
  • SIGTSTP 20 – trimis unui proces de către terminalul său de control pentru a-i solicita oprirea (terminal stop); inițiat de utilizator apăsând [Ctrl+Z].

Următoarele sunt exemple de comenzi de ucidere pentru a ucide aplicația Firefox folosind PID-ul său odată ce se blochează:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Pentru a ucide o aplicație folosind numele acesteia, utilizați pkill sau killall astfel:

pkill firefox
killall firefox 

Modificarea priorității procesului Linux

Pe sistemul Linux, toate procesele active au o prioritate și o anumită valoare plăcută. Procesele cu prioritate mai mare vor primi în mod normal mai mult timp CPU decât procesele cu prioritate mai mică.

Cu toate acestea, un utilizator de sistem cu privilegii root poate influența acest lucru cu comenzile nice și renice.

Din ieșirea comenzii de sus, NI-ul arată valoarea bună a procesului:

top  

Utilizați comanda nice pentru a seta o valoare bună pentru un proces. Rețineți că utilizatorii obișnuiți pot atribui o valoare frumoasă de la zero la 20 proceselor pe care le dețin.
Numai utilizatorul root poate folosi valori negative negative.

Pentru a renice prioritatea unui proces, utilizați comanda renice după cum urmează:

renice +8  2687
renice +8  2103

Consultați câteva articole utile despre cum să gestionați și să controlați procesele Linux.

  1. Managementul proceselor Linux: pornire, oprire și tot ce se află între ele
  2. Găsiți Top 15 procese după utilizarea memoriei cu „top” în modul lot
  3. Găsiți procesele de top în funcție de cea mai mare utilizare a memoriei și procesorului în Linux
  4. Cum să găsiți un nume de proces folosind numărul PID în Linux

Asta este tot pentru acum! Aveți întrebări sau idei suplimentare, împărtășiți-le cu noi prin intermediul formularului de feedback de mai jos.