Viss, kas jums jāzina par procesiem Linux [Visaptveroša rokasgrāmata]


Šajā rakstā mēs iepazīsimies ar procesu pamatzināšanu un īsi aplūkosim, kā pārvaldīt procesus Linux, izmantojot noteiktas komandas.

Process attiecas uz izpildāmo programmu; tas ir programmas darbības gadījums. To veido programmas instrukcija, no failiem nolasītie dati, citas programmas vai sistēmas lietotāja ievade.

Linux pamatā ir divu veidu procesi:

  • Priekšplāna procesi (saukti arī par interaktīviem procesiem) - tie tiek inicializēti un kontrolēti, izmantojot termināla sesiju. Citiem vārdiem sakot, lai sāktu šādus procesus, jābūt sistēmai pieslēgtam lietotājam; tie nav automātiski sākušies kā daļa no sistēmas funkcijām/pakalpojumiem.
  • Fona procesi (saukti arī par neinteraktīviem/automātiskiem procesiem) - ir procesi, kas nav saistīti ar termināli; viņi negaida lietotāja ievadi.

Tie ir īpaši fona procesu veidi, kas sākas sistēmas startēšanas laikā un turpina darboties mūžīgi kā pakalpojums; viņi nemirst. Tie tiek uzsākti kā sistēmas uzdevumi (darbojas kā pakalpojumi), spontāni. Tomēr tos var kontrolēt lietotājs, izmantojot init procesu.

Procesu izveide Linux

Jauns process parasti tiek izveidots, kad esošais process precīzi kopē sevi atmiņā. Bērna procesam būs tāda pati vide kā vecākiem, taču tikai procesa ID numurs ir atšķirīgs.

Jauna procesa izveidošanai Linux tiek izmantoti divi parastie veidi:

  • Funkcijas System() izmantošana - šī metode ir salīdzinoši vienkārša, tomēr tā ir neefektīva un tai ir ievērojami noteikti drošības riski.
  • Funkcijas fork() un exec() izmantošana - šī tehnika ir nedaudz uzlabota, taču piedāvā lielāku elastību, ātrumu un drošību.

Kā Linux identificē procesus?

Tā kā Linux ir daudzlietotāju sistēma, kas nozīmē, ka dažādi lietotāji sistēmā var palaist dažādas programmas, kodolam ir jāidentificē katrs programmas darbības gadījums.

Programma tiek identificēta pēc tās procesa ID (PID), kā arī tās vecākā procesa ID (PPID), tāpēc procesus var sīkāk iedalīt šādās kategorijās:

  • Vecāku procesi - tie ir procesi, kas izpildes laikā rada citus procesus.
  • Bērna procesi - šos procesus izpildes laikā rada citi procesi.

Init process ir visu sistēmas procesu māte (vecāks), tā ir pirmā programma, kas tiek izpildīta, palaižot Linux sistēmu; tas pārvalda visus pārējos sistēmas procesus. To sāk pats kodols, tāpēc principā tam nav vecāku procesa.

Inicializācijas procesam vienmēr ir procesa ID 1. Tas darbojas kā adoptētājs visiem bāreņu procesiem.

Lai atrastu procesa ID, varat izmantot komandu pidof:

# pidof systemd
# pidof top
# pidof httpd

Lai atrastu pašreizējā čaulas procesa ID un vecāka procesa ID, palaidiet:

$ echo $$
$ echo $PPID

Kad esat palaidis komandu vai programmu (piemēram, cloudcmd - CloudCommander), tas sāks procesu sistēmā. Jūs varat sākt priekšplāna (interaktīvu) procesu šādi, tas tiks savienots ar termināli, un lietotājs to varēs nosūtīt:

# cloudcmd

Lai sāktu procesu fonā (neinteraktīvs), izmantojiet simbolu & , šeit process nelasa lietotāja ievadīto informāciju, kamēr tas nav pārvietots uz priekšplānu.

# cloudcmd &
# jobs

Varat arī nosūtīt procesu uz fona, apturot to, izmantojot [Ctrl + Z] , tas nosūtīs procesam SIGSTOP signālu, tādējādi apturot tā darbību; tas kļūst dīkstāvē:

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

Lai turpinātu darbināt iepriekš apturēto komandu fonā, izmantojiet komandu bg:

# bg

Lai nosūtītu fona procesu uz priekšplānu, izmantojiet komandu fg kopā ar darba ID šādi:

# jobs
# fg %1

Jums var patikt arī: Kā sākt Linux komandu fonā un atvienot procesu terminālā

Izpildes laikā process mainās no viena stāvokļa uz citu atkarībā no tā vides/apstākļiem. Operētājsistēmā Linux procesam ir šādi iespējamie stāvokļi:

  • Darbojas - šeit tas darbojas vai nu (tas ir pašreizējais process sistēmā), vai arī ir gatavs darbībai (gaida, kad tiks piešķirts kāds no centrālajiem procesoriem).
  • Gaida - šajā stāvoklī process gaida notikuma iestāšanos vai sistēmas resursu. Turklāt kodols arī atšķir divu veidu gaidīšanas procesus; pārtraucami gaidīšanas procesi - kurus var pārtraukt signāli un nepārtraukti gaidīšanas procesi - gaida tieši aparatūras apstākļos, un tos nevar pārtraukt neviens notikums/signāls.
  • Apturēts - šajā stāvoklī process ir apturēts, parasti saņemot signālu. Piemēram, process, kas tiek atkļūdots.
  • Zombijs - šeit process ir miris, tas ir apturēts, bet tam joprojām ir ieraksts procesu tabulā.

Ir vairāki Linux rīki, lai skatītu/uzskaitītu darbojošos procesus sistēmā. Divas tradicionālās un labi zināmās ir populārākās komandas:

Tajā tiek parādīta informācija par aktīvo procesu atlasi sistēmā, kā parādīts zemāk:

# ps 
# ps -e | head 

dinamisks reāllaika skats uz darbināmu sistēmu, kā parādīts zemāk esošajā ekrānuzņēmumā:

# top 

Izlasiet šo, lai iegūtu vairāk populārāko lietojuma piemēru: 12 TOP komandu piemēri Linux

skatieni ir salīdzinoši jauns sistēmas uzraudzības rīks ar uzlabotām funkcijām:

# glances

Lai iegūtu visaptverošu lietošanas rokasgrāmatu, izlasiet: Glances - uzlabots reālā laika sistēmas uzraudzības rīks Linux

Ir vairāki citi noderīgi Linux sistēmas uzraudzības rīki, kurus varat izmantot aktīvo procesu uzskaitīšanai. Atveriet tālāk esošo saiti, lai uzzinātu vairāk par tiem:

  1. 20 komandrindas rīki Linux veiktspējas uzraudzībai
  2. 13 noderīgāki Linux uzraudzības rīki

Kā kontrolēt procesus Linux

Linux ir arī dažas komandas tādu procesu kontrolēšanai kā kill, pkill, pgrep un killall. Tālāk ir sniegti daži pamatpiemēri, kā tos izmantot:

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

Lai uzzinātu, kā padziļināti izmantot šīs komandas, lai iznīcinātu/pārtrauktu aktīvos procesus Linux, atveriet tālāk norādītās saites:

  1. Ceļvedis komandām Kill, Pkill un Killall, lai pārtrauktu Linux procesu.
  2. Kā atrast un nogalināt skriešanas procesus Linux

Ņemiet vērā, ka tos var izmantot, lai iznīcinātu nereaģējošas lietojumprogrammas Linux, kad sistēma sasalst.

Galvenais veids, kā kontrolēt procesus Linux, ir sūtīt viņiem signālus. Lai skatītu visus palaistos signālus, varat nosūtīt procesam vairākus signālus:

$ kill -l

Lai nosūtītu signālu procesam, izmantojiet komandas kill, pkill vai pgrep, kuras mēs minējām iepriekš. Bet programmas var reaģēt uz signāliem tikai tad, ja tās ir ieprogrammētas šos signālus atpazīt.

Un lielākā daļa signālu ir paredzēti sistēmas iekšējai lietošanai vai programmētājiem, kad viņi raksta kodu. Sistēmas lietotājam noderīgi ir šādi signāli:

  • SIGHUP 1 - tiek nosūtīts procesam, kad tā vadības terminālis ir aizvērts.
  • SIGINT 2 - tiek nosūtīts procesam ar tā kontrolējošo termināli, kad lietotājs pārtrauc procesu, nospiežot [Ctrl + C] .
  • SIGQUIT 3 - tiek nosūtīts procesam, ja lietotājs sūta izejas signālu [Ctrl + D] .
  • SIGKILL 9 - šis signāls nekavējoties pārtrauc (nogalina) procesu, un process neveiks nekādas attīrīšanas darbības.
  • SIGTERM 15 - tas ir programmas pārtraukšanas signāls (kill pēc noklusējuma to nosūtīs).
  • SIGTSTP 20 - to kontrolējošais terminālis nosūta procesam, lai pieprasītu tā apturēšanu (termināļa apstāšanās); lietotājs, nospiežot [Ctrl + Z] .

Tālāk ir norādīti kill komandu piemēri, kā nogalināt Firefox lietojumprogrammu, izmantojot tās PID, tiklīdz tā sasalst:

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

Lai nogalinātu lietojumprogrammu, izmantojot tās nosaukumu, izmantojiet pkill vai killall šādi:

$ pkill firefox
$ killall firefox 

Linux sistēmā visiem aktīvajiem procesiem ir prioritāte un noteikta jauka vērtība. Procesi ar augstāku prioritāti parasti saņem vairāk procesora laika nekā zemākas prioritātes procesi.

Tomēr sistēmas lietotājs ar root tiesībām to var ietekmēt ar komandām nice un renice.

No augšējās komandas izejas NI parāda procesa jauko vērtību:

$ top  

Izmantojiet komandu nice, lai iestatītu jauku procesa vērtību. Paturiet prātā, ka parastie lietotāji var piedēvēt jauku vērtību no nulles līdz 20 tiem piederošajiem procesiem.
Negatīvas jaukas vērtības var izmantot tikai saknes lietotājs.

Lai mainītu procesa prioritāti, izmantojiet komandu renice šādi:

$ renice +8  2687
$ renice +8  2103

Apskatiet mūsu noderīgos rakstus par to, kā pārvaldīt un kontrolēt Linux procesus.

  1. Linux procesu pārvaldība: sāknēšana, izslēgšana un viss starp tiem
  2. Atrodiet 15 populārākos procesus pēc atmiņas izmantošanas ar “top” pakešrežīmā
  3. Atrodiet vislabākos procesus pēc vislielākās atmiņas un procesora izmantošanas Linux sistēmā
  4. Kā atrast procesa nosaukumu, izmantojot Linux PID numuru

Tas pagaidām ir viss! Vai jums ir kādi jautājumi vai papildu idejas, dalieties tajos ar mums, izmantojot zemāk esošo atsauksmju veidlapu.