Viskas, ką reikia žinoti apie procesus sistemoje „Linux“ [išsamus vadovas]


Šiame straipsnyje apžvelgsime pagrindinį procesų supratimą ir trumpai apžvelgsime, kaip valdyti procesus Linux sistemoje naudojant tam tikras komandas.

Procesas reiškia vykdomą programą; tai veikiantis programos pavyzdys. Jį sudaro programos instrukcijos, duomenys, nuskaityti iš failų, kitų programų arba sistemos vartotojo įvestis.

Procesų tipai

„Linux“ sistemoje iš esmės yra dviejų tipų procesai:

  • Pirmojo plano procesai (taip pat vadinami interaktyviais procesais) – jie inicijuojami ir valdomi per terminalo seansą. Kitaip tariant, norint pradėti tokius procesus, prie sistemos turi būti prisijungęs vartotojas; jie nebuvo paleisti automatiškai kaip sistemos funkcijų/paslaugų dalis.
  • Foniniai procesai (taip pat vadinami neinteraktyviais/automatiniais procesais) – procesai, nesusieti su terminalu; jie nesitiki jokio vartotojo įvesties.

Kas yra Daemons

Tai yra specialūs foninių procesų tipai, kurie prasideda paleidžiant sistemą ir veikia amžinai kaip paslauga; jie nemiršta. Jie paleidžiami kaip sistemos užduotys (paleidžiamos kaip paslaugos), spontaniškai. Tačiau juos gali valdyti vartotojas per pradinį procesą.

Procesų kūrimas Linux sistemoje

Naujas procesas paprastai sukuriamas, kai esamas procesas atmintyje sukuria tikslią savo kopiją. Antrinio proceso aplinka bus tokia pati kaip ir pirminis procesas, tačiau skiriasi tik proceso ID numeris.

Yra du įprasti būdai, naudojami kuriant naują procesą Linux sistemoje:

  • Funkcijos System() naudojimas – šis metodas yra gana paprastas, tačiau neefektyvus ir kelia tam tikrų saugumo pavojų.
  • Funkcijų fork() ir exec() naudojimas – ši technika yra šiek tiek pažangi, tačiau siūlo didesnį lankstumą, greitį ir saugumą.

Kaip Linux identifikuoja procesus?

Kadangi „Linux“ yra kelių vartotojų sistema, o tai reiškia, kad skirtingi vartotojai sistemoje gali paleisti įvairias programas, branduolys turi unikaliai identifikuoti kiekvieną vykdomą programos egzempliorių.

Be to, programa identifikuojama pagal proceso ID (PID), taip pat pagal pirminį procesų ID (PPID), todėl procesus galima toliau suskirstyti į:

  • Pagrindiniai procesai – tai procesai, kurie vykdymo metu sukuria kitus procesus.
  • Antriniai procesai – šiuos procesus sukuria kiti procesai vykdymo metu.

Pradinis procesas

Init procesas yra visų sistemos procesų pagrindinė (pirminė) dalis. Tai pirmoji programa, kuri vykdoma paleidžiant Linux sistemą; ji valdo visus kitus sistemos procesus. Jį paleidžia pats branduolys, todėl iš esmės jis neturi pirminio proceso.

Pradinio proceso ID visada yra 1. Jis veikia kaip įtėvis, atliekantis visus našlaičių procesus.

Norėdami rasti proceso ID, galite naudoti pidof komandą:

pidof systemd
pidof top
pidof httpd

Norėdami rasti dabartinio apvalkalo proceso ID ir pirminio proceso ID, paleiskite:

echo $$
echo $PPID

Proceso pradžia Linux sistemoje

Kai paleisite komandą ar programą (pvz., cloudcmd – CloudCommander), sistemoje bus pradėtas procesas. Pirminio plano (interaktyvų) procesą galite pradėti taip, jis bus prijungtas prie terminalo ir vartotojas galės jį išsiųsti:

cloudcmd

„Linux“ fono darbai

Norėdami pradėti procesą fone (neinteraktyvus), naudokite simbolį &. Čia procesas neskaito vartotojo įvesties, kol jis neperkeliamas į pirmą planą.

cloudcmd &
jobs

Taip pat galite nusiųsti procesą į foną sustabdydami jį naudodami [Ctrl + Z], tai procesui atsiųs SIGSTOP signalą, taip sustabdydamas jo veiklą; jis tampa tuščias:

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

Jei norite toliau vykdyti anksčiau sustabdytą komandą fone, naudokite komandą bg:

bg

Norėdami nusiųsti foninį procesą į priekinį planą, naudokite komandą fg kartu su užduoties ID taip:

jobs
fg %1

Jums taip pat gali patikti: Kaip paleisti Linux komandą fone ir atjungti procesą terminale

Proceso būsenos sistemoje Linux

Vykdymo metu procesas keičiasi iš vienos būsenos į kitą, priklausomai nuo jo aplinkos/aplinkybių. Linux sistemoje procesas turi šias galimas būsenas:

  • Veikia – čia jis arba veikia (tai yra dabartinis sistemos procesas), arba yra paruoštas paleisti (laukia, kol bus priskirtas vienam iš procesorių).
  • Laukiama – šioje būsenoje procesas laukia, kol įvyks įvykis arba sistemos išteklius. Be to, branduolys taip pat išskiria dviejų tipų laukimo procesus; pertraukiami laukimo procesai – gali būti pertraukiami signalų ir nepertraukiami laukimo procesai – laukia tiesiogiai aparatinės įrangos sąlygomis ir negali būti nutraukti jokiu įvykiu/signalu.
  • Sustabdytas – šioje būsenoje procesas buvo sustabdytas, dažniausiai gavus signalą. Pavyzdžiui, procesas, kuris yra derinamas.
  • Zombis – procesas neveikia, jis buvo sustabdytas, bet vis dar yra įrašas proceso lentelėje.

Kaip peržiūrėti aktyvius procesus „Linux“.

Yra keletas „Linux“ įrankių, skirtų sistemoje veikiantiems procesams peržiūrėti/išvardyti, dvi tradicinės ir gerai žinomos yra „ps“ ir „top“ komandos:

1. ps komanda

Jame rodoma informacija apie aktyvių sistemos procesų pasirinkimą, kaip parodyta toliau:

ps 
ps -e | head 

2. viršuje – Sistemos stebėjimo įrankis

top yra galingas įrankis, siūlantis dinamišką veikiančios sistemos vaizdą realiuoju laiku, kaip parodyta toliau esančioje ekrano kopijoje:

top 

Perskaitykite tai, kad gautumėte daugiau populiariausių naudojimo pavyzdžių: 12 TOP komandų pavyzdžių sistemoje Linux

3. žvilgsniai – Sistemos stebėjimo įrankis

Žvilgsniai yra palyginti naujas sistemos stebėjimo įrankis su išplėstinėmis funkcijomis:

glances

Norėdami gauti išsamų naudojimo vadovą, perskaitykite: Žvilgsniai – pažangus realiojo laiko sistemos stebėjimo įrankis, skirtas Linux

Yra keletas kitų naudingų „Linux“ sistemos stebėjimo įrankių, kuriuos galite naudoti norėdami išvardyti aktyvius procesus. Atidarykite toliau pateiktą nuorodą ir skaitykite daugiau apie juos:

  1. 20 komandinės eilutės įrankių, skirtų „Linux“ našumui stebėti
  2. 13 daugiau naudingų „Linux“ stebėjimo įrankių

Kaip valdyti procesus Linux

„Linux“ taip pat turi keletą komandų, skirtų valdyti procesus, tokius kaip kill, pkill, pgrep ir killall. Toliau pateikiami keli pagrindiniai jų naudojimo pavyzdžiai:

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

Norėdami sužinoti, kaip nuodugniai naudoti šias komandas, užmušti/nutraukti aktyvius procesus Linux sistemoje, atidarykite toliau pateiktas nuorodas:

  1. „Kill“, „Pkill“ ir „Killall“ komandų, skirtų „Linux“ procesui nutraukti, vadovas
  2. Kaip rasti ir nužudyti veikiančius procesus sistemoje „Linux“.

Atminkite, kad galite juos naudoti norėdami sunaikinti nereaguojančias programas sistemoje „Linux“, kai sistema užšąla.

Signalų siuntimas procesams

Pagrindinis procesų valdymo būdas Linux sistemoje yra signalų siuntimas jiems. Yra keli signalai, kuriuos galite siųsti procesui, kad peržiūrėtumėte visus vykdomus signalus:

kill -l

Norėdami išsiųsti signalą procesui, naudokite komandas kill, pkill arba pgrep, kurias minėjome anksčiau. Tačiau programos gali reaguoti į signalus tik tuo atveju, jei jos užprogramuotos atpažinti tuos signalus.

Ir dauguma signalų yra skirti vidiniam sistemos naudojimui arba programuotojams, kai jie rašo kodą. Toliau pateikiami signalai, kurie yra naudingi sistemos vartotojui:

  • SIGHUP 1 – siunčiamas procesui, kai uždaromas jo valdymo terminalas.
  • SIGINTAS 2 – siunčiamas procesui jį valdančio terminalo, kai vartotojas pertraukia procesą paspausdamas [Ctrl+C].
  • SIGQUIT 3 – siunčiamas procesui, jei vartotojas siunčia išėjimo signalą [Ctrl+D].
  • SIGKILL 9 – šis signalas iš karto nutraukia (užmuša) procesą ir procesas neatliks jokių valymo operacijų.
  • SIGTERM 15 – tai programos nutraukimo signalas (nužudymas jį išsiųs pagal numatytuosius nustatymus).
  • SIGTSTP 20 – jį valdantis terminalas siunčia procesui, prašydamas jį sustabdyti (terminalo sustabdymas); inicijuoja vartotojas paspausdamas [Ctrl+Z].

Toliau pateikiami žudymo komandų pavyzdžiai, kaip nužudyti „Firefox“ programą naudojant jos PID, kai ji užšąla:

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

Norėdami užmušti programą naudodami jos pavadinimą, naudokite pkill arba killall, pavyzdžiui:

pkill firefox
killall firefox 

„Linux“ proceso prioriteto keitimas

Linux sistemoje visi aktyvūs procesai turi prioritetą ir tam tikrą malonią vertę. Aukštesnio prioriteto procesai paprastai gauna daugiau procesoriaus laiko nei žemesnio prioriteto procesai.

Tačiau sistemos vartotojas, turintis root teises, gali tai paveikti komandomis nice ir renice.

Iš viršutinės komandos išvesties NI parodo malonią proceso reikšmę:

top  

Norėdami nustatyti gražią proceso vertę, naudokite komandą nice. Atminkite, kad įprasti naudotojai savo procesams gali priskirti gražią reikšmę nuo nulio iki 20.
Tik pagrindinis vartotojas gali naudoti neigiamas gražias reikšmes.

Norėdami renice nustatyti proceso prioritetą, naudokite komandą renice taip:

renice +8  2687
renice +8  2103

Peržiūrėkite keletą naudingų straipsnių apie tai, kaip valdyti ir valdyti Linux procesus.

  1. „Linux“ procesų valdymas: paleidimas, išjungimas ir viskas tarp jų
  2. Raskite 15 populiariausių procesų pagal atminties naudojimą naudodami paketinį režimą „top“.
  3. Raskite populiariausius veikiančius procesus pagal didžiausią atminties ir procesoriaus naudojimą sistemoje „Linux“.
  4. Kaip rasti proceso pavadinimą naudojant PID numerį sistemoje „Linux“.

Tai kol kas viskas! Jei turite klausimų ar papildomų idėjų, pasidalykite jais su mumis naudodami toliau pateiktą atsiliepimų formą.