Sve što trebate znati o procesima u Linuxu [Sveobuhvatan vodič]


U ovom ćemo članku proći kroz osnovno razumijevanje procesa i ukratko pogledati kako upravljati procesima u Linuxu pomoću određenih naredbi.

Proces se odnosi na program u izvršenju; to je pokrenuta instanca programa. Sastoji se od programskih uputa, podataka koji se čitaju iz datoteka, drugih programa ili podataka korisnika sustava.

U osnovi postoje dvije vrste procesa u Linuxu:

  • Procesi u prvom planu (koji se nazivaju i interaktivni procesi) - oni se inicijaliziraju i kontroliraju kroz terminalnu sesiju. Drugim riječima, za pokretanje takvih procesa mora postojati korisnik povezan sa sustavom; nisu se automatski pokrenuli kao dio funkcija/usluga sustava.
  • Pozadinski procesi (koji se nazivaju i neinteraktivni/automatski procesi) - su procesi koji nisu povezani s terminalom; ne očekuju korisničke unose.

To su posebne vrste pozadinskih procesa koji započinju pri pokretanju sustava i neprestano se izvode kao usluga; ne umiru. Pokreću se kao sistemski zadaci (pokreću se kao usluge), spontano. Međutim, njima korisnik može upravljati putem postupka pokretanja.

Stvaranje procesa u Linuxu

Novi se postupak obično kreira kada postojeći proces napravi točnu kopiju sebe u memoriji. Podređeni proces imat će isto okruženje kao i njegov roditelj, ali samo je ID broj procesa različit.

Postoje dva uobičajena načina za stvaranje novog procesa u Linuxu:

  • Korištenje funkcije System() - ova je metoda relativno jednostavna, međutim, neučinkovita je i ima značajno određene sigurnosne rizike.
  • Korištenje funkcije fork() i exec() - ova je tehnika malo napredna, ali nudi veću fleksibilnost, brzinu, zajedno sa sigurnošću.

Kako Linux identificira procese?

Budući da je Linux višekorisnički sustav, što znači da različiti korisnici mogu izvoditi različite programe na sustavu, jezgra mora jedinstveno identificirati svaku pokrenutu instancu programa.

A program se identificira svojim ID-om procesa (PID), kao i ID-om nadređenih procesa (PPID), stoga se procesi mogu dalje kategorizirati u:

  • Nadređeni procesi - to su procesi koji stvaraju druge procese tijekom izvođenja.
  • Podređeni procesi - ove procese stvaraju drugi procesi tijekom izvođenja.

Init proces je majka (roditelj) svih procesa u sustavu, to je prvi program koji se izvršava kad se Linux sustav pokrene; upravlja svim ostalim procesima u sustavu. Pokreće ga sam kernel, tako da u principu nema nadređeni proces.

Init proces uvijek ima ID procesa 1. Funkcionira kao usvojitelj za sve osirotele procese.

Pomoću naredbe pidof možete pronaći ID procesa:

# pidof systemd
# pidof top
# pidof httpd

Da biste pronašli ID procesa i nadređeni ID trenutne ljuske, pokrenite:

$ echo $$
$ echo $PPID

Jednom kada pokrenete naredbu ili program (na primjer cloudcmd - CloudCommander), pokrenut će postupak u sustavu. Možete započeti postupak u prvom planu (interaktivni) na sljedeći način, on će biti povezan s terminalom i korisnik ga može poslati unos:

# cloudcmd

Da biste započeli postupak u pozadini (ne-interaktivni), upotrijebite simbol & , ovdje postupak ne čita unos korisnika dok se ne premjesti u prvi plan.

# cloudcmd &
# jobs

Također možete poslati postupak u pozadinu suspendiranjem pomoću [Ctrl + Z] , što će poslati signal SIGSTOP procesu, čime se zaustavljaju njegove operacije; postaje prazan:

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

Da biste nastavili izvoditi gore suspendiranu naredbu u pozadini, upotrijebite naredbu bg:

# bg

Da biste poslali pozadinski postupak u prvi plan, upotrijebite naredbu fg zajedno s ID-om posla tako:

# jobs
# fg %1

Možda će vam se svidjeti i: Kako pokrenuti Linux naredbu u pozadini i odvojiti postupak u terminalu

Tijekom izvršenja, proces se mijenja iz jednog stanja u drugo, ovisno o svom okruženju/okolnostima. U Linuxu postupak ima sljedeća moguća stanja:

  • Izvodi se - ovdje se ili izvodi (to je trenutni postupak u sustavu) ili je spreman za izvođenje (čeka da bude dodijeljen jednom od CPU-a).
  • Čekanje - u ovom stanju proces čeka na događaj ili na sistemski resurs. Uz to, kernel također razlikuje dvije vrste procesa čekanja; prekidni procesi čekanja - mogu se prekinuti signalima i neprekinuti procesi čekanja - čekaju izravno u hardverskim uvjetima i ne mogu ih prekinuti nijedan događaj/signal.
  • Zaustavljeno - u ovom je stanju postupak zaustavljen, obično primanjem signala. Na primjer, postupak koji se otklanja pogreškama.
  • Zombi - ovdje je proces mrtav, zaustavljen je, ali još uvijek ima unos u tablici procesa.

Postoji nekoliko Linux alata za pregled/uvrštavanje pokrenutih procesa u sustavu, dvije tradicionalne i dobro poznate su glavne naredbe:

Prikazuje informacije o odabiru aktivnih procesa u sustavu kako je prikazano dolje:

# ps 
# ps -e | head 

dinamički prikaz aktivnog sustava u stvarnom vremenu kako je prikazano na snimci zaslona u nastavku:

# top 

Pročitajte ovo za još najboljih primjera upotrebe: 12 primjera naredbi TOP u Linuxu

pogled je relativno novi alat za nadzor sustava s naprednim značajkama:

# glances

Za sveobuhvatan vodič za uporabu pročitajte: Glances - napredni alat za nadzor sustava u stvarnom vremenu za Linux

Postoji nekoliko drugih korisnih alata za nadzor Linux sustava pomoću kojih možete navesti aktivne procese, otvorite donju vezu da biste pročitali više o njima:

  1. 20 alata naredbenog retka za praćenje izvedbe Linuxa
  2. 13 korisnijih alata za nadzor Linuxa

Kako kontrolirati procese u Linuxu

Linux također ima neke naredbe za upravljanje procesima poput kill, pkill, pgrep i killall, u nastavku slijedi nekoliko osnovnih primjera kako ih koristiti:

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

Da biste saznali kako dublje koristiti ove naredbe, ubiti/prekinuti aktivne procese u Linuxu, otvorite donje veze:

  1. Vodič za naredbe Kill, Pkill i Killall za ukidanje Linux procesa
  2. Kako pronaći i ubiti pokrenute procese u Linuxu

Imajte na umu da ih možete koristiti za ubijanje aplikacija koje ne reagiraju u Linuxu kada se vaš sustav zamrzne.

Temeljni način upravljanja procesima u Linuxu je slanjem signala. Postoji više signala koje možete poslati procesu kako biste vidjeli sve pokrenute signale:

$ kill -l

Da biste poslali signal procesu, upotrijebite naredbe kill, pkill ili pgrep koje smo ranije spomenuli. Ali programi mogu reagirati na signale samo ako su programirani da ih prepoznaju.

A većina signala je za internu upotrebu sustava ili za programere kada pišu kod. Slijede signali koji su korisni korisniku sustava:

  • SIGHUP 1 - šalje se procesu kada je njegov upravljački terminal zatvoren.
  • ZNAK 2 - šalje se procesu putem upravljačkog terminala kada korisnik prekida postupak pritiskom na [Ctrl + C] .
  • SIGQUIT 3 - šalje se procesu ako korisnik pošalje signal za napuštanje [Ctrl + D] .
  • SIGKILL 9 - ovaj signal odmah završava (ubija) postupak i postupak neće izvršiti nikakve operacije čišćenja.
  • SIGTERM 15 - ovo je signal za prekid programa (kill će to poslati prema zadanim postavkama).
  • SIGTSTP 20 - šalje ga upravljački terminal upravljačkom procesu kako bi ga zaustavio (zaustavljanje terminala); pokrenuo korisnik pritiskom na [Ctrl + Z] .

Slijede primjeri naredbi kill za ubijanje Firefox aplikacije pomoću njegovog PID-a nakon što se zamrzne:

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

Da biste ubili aplikaciju koristeći njezino ime, upotrijebite pkill ili killall ovako:

$ pkill firefox
$ killall firefox 

Na Linux sustavu, svi aktivni procesi imaju prioritet i određenu lijepu vrijednost. Procesi s većim prioritetom obično će dobiti više procesorskog vremena od procesa s nižim prioritetom.

Međutim, korisnik sustava s root privilegijama može na to utjecati pomoću naredbi nice i renice.

Iz izlaza naredbe top, NI prikazuje lijepu vrijednost procesa:

$ top  

Upotrijebite lijepu naredbu za postavljanje lijepe vrijednosti za postupak. Imajte na umu da normalni korisnici procesima u njihovom vlasništvu mogu pripisati lijepu vrijednost od nule do 20.
Samo root korisnik može koristiti negativne lijepe vrijednosti.

Da biste resetirali prioritet postupka, upotrijebite naredbu renice na sljedeći način:

$ renice +8  2687
$ renice +8  2103

Pogledajte naše korisne članke o upravljanju i kontroli Linux procesa.

  1. Linux upravljanje procesima: pokretanje, isključivanje i sve između
  2. Pronađite 15 najboljih postupaka prema korištenju memorije s "vrhom" u batch načinu
  3. Pronađite najbolje pokrenute procese prema najvećoj upotrebi memorije i procesora u Linuxu
  4. Kako pronaći naziv procesa pomoću PID broja u Linuxu

To je sve za sada! Imate li pitanja ili dodatnih ideja, podijelite ih s nama putem obrasca za povratne informacije u nastavku.