Serija RHCSA: Upravljanje procesov v RHEL 7: Zagon, zaustavitev in vse vmes - 5. del


Ta članek bomo začeli s splošno in kratko revizijo dogajanja od trenutka, ko pritisnete gumb za vklop, da vklopite strežnik RHEL 7, dokler se v vmesniku ukazne vrstice ne prikaže zaslon za prijavo.

Prosimo, upoštevajte, da:

1. ista osnovna načela veljajo z morda manjšimi spremembami tudi za druge distribucije Linuxa in
2. Naslednji opis ni namenjen predstavitvi izčrpne razlage zagonskega postopka, temveč le osnove.

Postopek zagona Linuxa

1. POST (samodejni preizkus ob vklopu) inicializira in izvede preverjanja strojne opreme.

2. Ko se POST konča, se sistemski nadzor prenese na zagonski nalagalnik prve stopnje, ki je shranjen bodisi v zagonskem sektorju enega od trdih diskov (za starejše sisteme, ki uporabljajo BIOS in MBR), bodisi v namenski (U) EFI particijo.

3. Prvostopenjski zagonski nalagalnik nato naloži drugostopenjski zagonski nalagalnik, najpogosteje GRUB (GRand Unified Boot Loader), ki se nahaja znotraj/boot, ta pa nato naloži jedro in začetni datotečni sistem na osnovi RAM-a (znan tudi kot initramfs , ki vsebuje programe in binarne datoteke, ki izvajajo potrebna dejanja, potrebna za končno namestitev dejanskega korenskega datotečnega sistema).

4. Prikaže se začetni zaslon, ki nam omogoča, da izberemo operacijski sistem in jedro za zagon:

5. Jedro nastavi strojno opremo, pritrjeno na sistem, in ko je koreninski datotečni sistem nameščen, zažene postopek s PID 1, ki bo nato inicializiral druge procese in nam predstavil poziv za prijavo.

Opomba: Če želimo to narediti pozneje, lahko s pomočjo ukaza dmesg preučimo posebnosti tega postopka in filtriramo njegov izhod z orodji, ki smo jih razložili v prejšnjih člankih te serije.

V zgornjem primeru smo z dobro znanim ukazom ps prikazali seznam trenutnih procesov, katerih nadrejeni proces (ali z drugimi besedami, postopek, ki jih je zagnal) je systemd (sistem in upravitelj storitev, ki ga je zamenjala večina sodobnih distribucij Linuxa do) med zagonom sistema:

# ps -o ppid,pid,uname,comm --ppid=1

Ne pozabite, da zastavica -o (okrajšava za –format) omogoča, da predstavite izhodne podatke ps v prilagojeni obliki, ki ustreza vašim potrebam, z uporabo ključnih besed, določenih v odseku STANDARD FORMAT SPECIFIERS v man ps.

Drug primer, v katerem boste želeli definirati izhod ps, namesto da bi privzeto, je, ko morate najti procese, ki povzročajo znatno obremenitev CPU in/ali pomnilnika, in jih ustrezno razvrstiti:

# ps aux --sort=+pcpu              # Sort by %CPU (ascending)
# ps aux --sort=-pcpu              # Sort by %CPU (descending)
# ps aux --sort=+pmem              # Sort by %MEM (ascending)
# ps aux --sort=-pmem              # Sort by %MEM (descending)
# ps aux --sort=+pcpu,-pmem        # Combine sort by %CPU (ascending) and %MEM (descending)

Uvod v SystemD

Le malo odločitev v svetu Linuxa je povzročilo več polemik kot sprejetje systemd v velikih distribucijah Linuxa. Zagovorniki Systemda kot glavne prednosti omenjajo naslednja dejstva:

Preberite tudi: Zgodba za 'init' in 'systemd'

1. Systemd omogoča večjo obdelavo vzporedno med zagonom sistema (v nasprotju s starejšim SysVinitom, ki je vedno počasnejši, ker zažene procese enega za drugim, preveri, ali je eden odvisen od drugega, in nato počaka, da se demoni tako zaženejo več storitev se lahko zažene) in

2. V delujočem sistemu deluje kot dinamično upravljanje virov. Tako se storitve po potrebi zaženejo (da bi se izognili porabi sistemskih virov, če se ne uporabljajo), namesto da bi se med zagonom zagnali brez tehtnega razloga.

3. Združljivost s skripti SysVinit za nazaj.

Systemd nadzira pripomoček systemctl. Če prihajate iz okolja SysVinit, boste verjetno poznali:

  1. servisno orodje, ki je bilo - v tistih starejših sistemih - uporabljeno za upravljanje skriptov SysVinit in
  2. pripomoček chkconfig, ki je služil za posodabljanje in poizvedovanje o informacijah na ravni sistema za sistemske storitve.
  3. zaustavitev, ki ste jo morali večkrat uporabiti za ponovni zagon ali zaustavitev delujočega sistema.

Naslednja tabela prikazuje podobnosti med uporabo teh starejših orodij in systemctl:

Systemd je predstavil tudi koncepte enot (ki so lahko storitev, vpenjalna točka, naprava ali omrežna vtičnica) in ciljev (tako Systemd uspe hkrati zagnati več sorodnih procesov in jih je mogoče upoštevati - čeprav ne enakovreden - kot ekvivalent ravni delovanja v sistemih, ki temeljijo na SysVinit.

Povzetek

Druge naloge, povezane z upravljanjem procesov, vključujejo, vendar ne smejo biti omejene, zmožnost:

To dosežemo s pomočjo pripomočka renice, ki spremeni prioriteto razporejanja enega ali več zagnanih procesov. Preprosto povedano, prioriteta razporejanja je funkcija, ki omogoča jedru (prisotno v različicah => 2.6), da dodeli sistemske vire glede na dodeljeno prioriteto izvajanja (aka lepota, v razponu od -20 do 19) danega procesa.

Osnovna sintaksa renice je naslednja:

# renice [-n] priority [-gpu] identifier

V splošnem ukazu zgoraj je prvi argument prednostna vrednost, ki jo je treba uporabiti, medtem ko je drugi argument mogoče razlagati kot ID procesov (kar je privzeta nastavitev), ID skupin procesov, ID uporabnikov ali uporabniška imena. Običajni uporabnik (razen root) lahko spremeni le prednostno razporeditev procesa, ki ga ima v lasti, in samo poveča stopnjo prijaznosti (kar pomeni, da zavzame manj sistemskih virov).

Natančneje povedano, ubijanje postopka omogoča pošiljanje signala, da bodisi elegantno zaključi svoje izvajanje (SIGTERM = 15) bodisi takoj (SIGKILL = 9) z ukazi kill ali pkill.

Razlika med tema dvema orodjema je v tem, da se prvo uporablja za zaključek določenega procesa ali skupine procesov, drugo pa vam omogoča, da to storite na podlagi imena in drugih atributov.

Poleg tega je pkill priložen pgrep, ki prikazuje PID-je, na katere bo vplival, če bo pkill uporabljen. Na primer, pred zagonom:

# pkill -u gacanepa

Morda bi bilo koristno na hitro pogledati, kateri so PID-ji v lasti gacanepe:

# pgrep -l -u gacanepa

Privzeto tako kill kot pkill pošljeta v postopek signal SIGTERM. Kot smo že omenili, je mogoče ta signal prezreti (medtem ko postopek konča svoje izvajanje ali za vedno), tako da boste morali v ukazni vrstici, ko resno ustavite tekoči postopek z utemeljenim razlogom, navesti signal SIGKILL:

# kill -9 identifier               # Kill a process or a process group
# kill -s SIGNAL identifier        # Idem
# pkill -s SIGNAL identifier       # Kill a process by name or other attributes 

Zaključek

V tem članku smo razložili osnove zagonskega procesa v sistemu RHEL 7 in analizirali nekatera orodja, ki so na voljo za pomoč pri upravljanju procesov z uporabo običajnih pripomočkov in ukazov, specifičnih za systemd.

Upoštevajte, da ta seznam ni namenjen pokrivanju vseh zvokov te teme, zato v ta članek v spodnji obrazec za komentar lahko dodate lastna orodja in ukaze. Vprašanja in drugi komentarji so dobrodošli.