Kõik, mida peate teadma Linuxi protsesside kohta [Põhjalik juhend]


Selles artiklis tutvume protsesside põhiteadmistega ja uurime lühidalt, kuidas teatud käskude abil Linuxis protsesse hallata.

Protsess viitab käivitatavale programmile; see on programmi töötav eksemplar. See koosneb programmi juhistest, failidest loetud andmetest, muudest programmidest või süsteemi kasutaja sisendist.

Linuxis on põhimõtteliselt kahte tüüpi protsesse:

  • Esiplaaniprotsessid (neid nimetatakse ka interaktiivseteks protsessideks) - need initsialiseeritakse ja neid kontrollitakse terminaliseansi kaudu. Teisisõnu peab selliste protsesside alustamiseks olema süsteemiga ühendatud kasutaja; neid pole süsteemi funktsioonide/teenuste osana automaatselt käivitatud.
  • Taustaprotsessid (neid nimetatakse ka mitteinteraktiivseteks/automaatseteks protsessideks) - protsessid, mis pole terminaliga ühendatud; nad ei oota kasutaja sisendit.

Need on spetsiaalsed taustaprotsesside tüübid, mis algavad süsteemi käivitamisel ja töötavad igavesti teenusena; nad ei sure. Neid alustatakse spontaanselt süsteemiülesannetena (käitatakse teenustena). Kuid kasutaja saab neid init protsessi kaudu juhtida.

Protsesside loomine Linuxis

Uus protsess luuakse tavaliselt siis, kui olemasolev protsess teeb mälust endast täpse koopia. Lapse protsessil on sama keskkond kui vanemal, kuid ainult protsessi ID number on erinev.

Linuxis uue protsessi loomiseks kasutatakse kahte tavapärast viisi:

  • Funktsiooni System() kasutamine - see meetod on suhteliselt lihtne, kuid see on ebaefektiivne ja sellel on märkimisväärselt teatud turvariskid.
  • Funktsiooni fork() ja exec() kasutamine - see tehnika on veidi arenenud, kuid pakub suuremat paindlikkust, kiirust ja turvalisust.

Kuidas Linux protsesse tuvastab?

Kuna Linux on mitme kasutaja süsteem, mis tähendab, et erinevad kasutajad saavad süsteemis käitada erinevaid programme, peab kernel identifitseerima programmi iga töötava eksemplari.

Ja programmi identifitseeritakse nii protsessi ID (PID) kui ka algprotsesside ID (PPID) järgi, seetõttu saab protsesse liigitada järgmiselt:

  • Vanemprotsessid - need on protsessid, mis loovad tööajal muid protsesse.
  • Alamprotsessid - neid protsesse loovad tööajal teised protsessid.

Init-protsess on kõigi süsteemi protsesside ema (vanem), see on esimene programm, mis käivitatakse Linuxi süsteemi käivitamisel; see haldab kõiki muid süsteemis toimuvaid protsesse. Selle käivitab kernel ise, nii et põhimõtteliselt puudub sellel vanemprotsess.

Init-protsessil on alati protsessi ID 1. See toimib kõigi orvuks jäänud protsesside lapsendajana.

Protsessi ID leidmiseks saate kasutada käsku pidof:

# pidof systemd
# pidof top
# pidof httpd

Praeguse kesta protsessi ID ja vanema protsessi ID leidmiseks käivitage:

$ echo $$
$ echo $PPID

Kui olete käsu või programmi käivitanud (näiteks cloudcmd - CloudCommander), käivitab see süsteemis protsessi. Esiplaani (interaktiivset) saate käivitada järgmiselt, see ühendatakse terminaliga ja kasutaja saab selle sisendi saata:

# cloudcmd

Protsessi alustamiseks taustal (mitteinteraktiivne) kasutage sümbolit & . Siin ei loe protsess kasutaja sisendit enne, kui see on esiplaanile viidud.

# cloudcmd &
# jobs

Protsessi saate saata ka taustale, peatades selle [Ctrl + Z] abil, see saadab protsessile SIGSTOP-signaali, peatades seeläbi selle toimingud; see muutub jõude:

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

Ülal peatatud käsu jätkamiseks taustal kasutage käsku bg:

# bg

Taustaprotsessi esiplaanile saatmiseks kasutage käsku fg koos töö ID-ga nii:

# jobs
# fg %1

Samuti võib teile meeldida: Kuidas käivitada Linuxi käsk taustal ja eraldada protsess terminalis

Täitmise käigus muutub protsess ühest olekust teise, sõltuvalt selle keskkonnast/oludest. Linuxis on protsessil järgmised võimalikud olekud:

  • Töötamine - siin see kas töötab (see on süsteemi praegune protsess) või on valmis töötama (see ootab ühele protsessorile määramist).
  • Ootan - selles olekus ootab protsess sündmuse toimumist või süsteemi ressurssi. Lisaks eristab kern ka kahte tüüpi ooteprotsesse; katkestatavad ooteprotsessid - signaalid võivad katkestada ja katkematud ooteprotsessid - ootavad otse riistvaratingimustes ja neid ei saa ükski sündmus/signaal katkestada.
  • Peatatud - selles olekus on protsess peatatud, tavaliselt signaali saamisega. Näiteks silumisprotsess.
  • Zombie - siin on protsess surnud, see on peatatud, kuid sellel on endiselt protsessitabelis kirje.

Süsteemis jooksvate protsesside vaatamiseks/loetlemiseks on mitu Linuxi tööriista, kaks traditsioonilist ja tuntud on käsk:

See kuvab teavet süsteemi aktiivsete protsesside valiku kohta, nagu allpool näidatud:

# ps 
# ps -e | head 

jooksva süsteemi dünaamiline reaalajas vaade, nagu on näidatud alloleval ekraanipildil:

# top 

Loe seda, et saada rohkem populaarseimaid näiteid: 12 TOP-i näite Linuxis

pilgud on suhteliselt uus täiustatud funktsioonidega süsteemi jälgimise tööriist:

# glances

Põhjaliku kasutusjuhendi saamiseks lugege läbi: Pilk - täiustatud reaalajas süsteemi jälgimise tööriist Linuxile

Aktiivsete protsesside loetlemiseks võite kasutada veel mitmeid kasulikke Linuxi süsteemi jälgimise tööriistu. Nende kohta lisateabe saamiseks avage allolev link:

  1. 20 käsurea tööriista Linuxi jõudluse jälgimiseks
  2. 13 kasulikumat Linuxi jälgimistööriista

Kuidas juhtida protsesse Linuxis

Linuxil on ka mõned käsud selliste protsesside kontrollimiseks nagu kill, pkill, pgrep ja killall. Allpool on mõned põhinäited nende kasutamiseks:

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

Nende käskude põhjalikuks kasutamiseks Linuxi aktiivsete protsesside hävitamiseks/lõpetamiseks avage järgmised lingid:

  1. Kill, Pkill ja Killall käskude juhend Linuxi protsessi lõpetamiseks
  2. Kuidas leida ja tappa jooksvaid protsesse Linuxis

Pange tähele, et saate neid kasutada Linuxi reageerimata rakenduste tapmiseks, kui teie süsteem külmub.

Põhiline viis protsesside juhtimiseks Linuxis on neile signaalide saatmine. Kõigi käitatavate signaalide kuvamiseks võite protsessile saata mitu signaali:

$ kill -l

Protsessile signaali saatmiseks kasutage käske kill, pkill või pgrep, mida me varem mainisime. Kuid programmid saavad signaalidele reageerida ainult siis, kui nad on programmeeritud neid signaale tuvastama.

Ja enamik signaale on mõeldud süsteemi sisemiseks kasutamiseks või programmeerijatele koodi kirjutamisel. Järgnevad on süsteemikasutajale kasulikud signaalid:

  • SIGHUP 1 - saadetakse protsessile, kui selle juhtterminal on suletud.
  • SIGINT 2 - saadetakse protsessi juhtiva terminali poolt, kui kasutaja protsessi katkestab, vajutades [Ctrl + C] .
  • SIGQUIT 3 - saadetakse protsessile, kui kasutaja saadab väljumis signaali [Ctrl + D] .
  • SIGKILL 9 - see signaal lõpetab (tapab) protsessi kohe ja protsess ei tee puhastustoiminguid.
  • SIGTERM 15 - see on programmi lõpetamise signaal (kill saadab selle vaikimisi).
  • SIGTSTP 20 - saadetakse juhtiva terminali poolt protsessile selle peatamiseks (terminali peatus); algatas kasutaja, vajutades klahvi [Ctrl + Z] .

Järgnevalt on toodud kill-käskude näited Firefoxi rakenduse tapmiseks selle PID abil, kui see külmub:

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

Rakenduse tapmiseks selle nime abil kasutage pkilli või killalli nii:

$ pkill firefox
$ killall firefox 

Linuxi süsteemis on kõigil aktiivsetel protsessidel prioriteet ja kindel kena väärtus. Kõrgema prioriteediga protsessid saavad tavaliselt rohkem protsessori aega kui madalama prioriteediga protsessid.

Kuid juurõigusega süsteemikasutaja saab seda mõjutada käskude kena ja renice abil.

Ülemise käsu väljundist näitab NI protsessi kena väärtust:

$ top  

Protsessi jaoks kena väärtuse määramiseks kasutage käsku kena. Pidage meeles, et tavakasutajad saavad omistada protsessidele, mis neile kuuluvad, kena väärtuse nullist 20-ni.
Ainult juurkasutaja saab kasutada negatiivseid kena väärtusi.

Protsessi prioriteedist loobumiseks kasutage käsku renice järgmiselt:

$ renice +8  2687
$ renice +8  2103

Vaadake meie kasulikke artikleid Linuxi protsesside haldamise ja juhtimise kohta.

  1. Linuxi protsessihaldus: alglaadimine, seiskamine ja kõik muu vahel
  2. Leidke 15 kõige populaarsemat mäluprotsessi protsessi pakkumisrežiimis sõna „top” abil
  3. Leidke Linuxis kõige paremini töötavad protsessid suurima mälu ja protsessori kasutamise järgi
  4. Kuidas leida protsessi nimi Linuxi PID-numbri abil

Praeguseks kõik! Kas teil on küsimusi või täiendavaid ideid, jagage neid meiega allpool oleva tagasisidevormi kaudu.