Alt hvad du behøver at vide om processer i Linux [Omfattende vejledning]


I denne artikel vil vi gennemgå en grundlæggende forståelse af processer og kort se på, hvordan man styrer processer i Linux ved hjælp af bestemte kommandoer.

En proces henviser til et program under udførelse; det er en kørende forekomst af et program. Den består af programinstruktionen, data, der læses fra filer, andre programmer eller input fra en systembruger.

Der er grundlæggende to typer processer i Linux:

  • Forgrundsprocesser (også kaldet interaktive processer) - disse initialiseres og styres gennem en terminalsession. Med andre ord skal der være en bruger tilsluttet systemet for at starte sådanne processer; de er ikke startet automatisk som en del af systemfunktionerne/tjenesterne.
  • Baggrundsprocesser (også kaldet ikke-interaktive/automatiske processer) - er processer, der ikke er forbundet til en terminal; de forventer ikke noget brugerinput.

Dette er specielle typer baggrundsprocesser, der starter ved systemstart og fortsætter med at køre for evigt som en tjeneste; de dør ikke. De startes som systemopgaver (køres som tjenester), spontant. De kan dog styres af en bruger via init-processen.

Oprettelse af processer i Linux

En ny proces oprettes normalt, når en eksisterende proces laver en nøjagtig kopi af sig selv i hukommelsen. Underordnet proces vil have det samme miljø som dets forælder, men kun proces-ID-nummeret er anderledes.

Der er to konventionelle måder, der bruges til at oprette en ny proces i Linux:

  • Brug af System() -funktionen - denne metode er relativt enkel, men den er ineffektiv og har betydeligt visse sikkerhedsrisici.
  • Brug af fork() og exec() -funktion - denne teknik er lidt avanceret, men giver større fleksibilitet, hastighed sammen med sikkerhed.

Hvordan identificerer Linux processer?

Da Linux er et flerbruger-system, hvilket betyder, at forskellige brugere kan køre forskellige programmer på systemet, skal hver kørende forekomst af et program identificeres entydigt af kernen.

Og et program identificeres af dets proces-id (PID) såvel som dets overordnede processer-id (PPID), derfor kan processer yderligere kategoriseres i:

  • Overordnede processer - dette er processer, der skaber andre processer i løbet af kørselstiden.
  • Underordnede processer - disse processer oprettes af andre processer i løbet af kørselstiden.

Den oprindelige proces er mor (forælder) til alle processer på systemet, det er det første program, der udføres, når Linux-systemet starter op; det styrer alle andre processer på systemet. Den startes af selve kernen, så den har i princippet ikke en overordnet proces.

Init-processen har altid proces-id på 1. Den fungerer som en adoptivforælder til alle forældreløse processer.

Du kan bruge kommandoen pidof til at finde id for en proces:

# pidof systemd
# pidof top
# pidof httpd

For at finde proces-id og overordnet proces-id for den aktuelle shell skal du køre:

$ echo $$
$ echo $PPID

Når du kører en kommando eller et program (for eksempel cloudcmd - CloudCommander), starter den en proces i systemet. Du kan starte en forgrundsproces (interaktiv) som følger, den forbindes til terminalen, og en bruger kan sende input den:

# cloudcmd

For at starte en proces i baggrunden (ikke-interaktiv) skal du bruge & symbolet. Her læser processen ikke input fra en bruger, før den flyttes til forgrunden.

# cloudcmd &
# jobs

Du kan også sende en proces til baggrunden ved at suspendere den ved hjælp af [Ctrl + Z] , dette vil sende SIGSTOP-signalet til processen og dermed stoppe dens operationer; det bliver inaktiv:

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

For at fortsætte med at køre den ovennævnte suspenderede kommando i baggrunden skal du bruge kommandoen bg:

# bg

For at sende en baggrundsproces til forgrunden skal du bruge kommandoen fg sammen med job-id'et sådan:

# jobs
# fg %1

Du kan muligvis også lide: Sådan starter du Linux-kommando i baggrunden og løsner processen i terminalen

Under udførelse skifter en proces fra en tilstand til en anden afhængigt af dens miljø/omstændigheder. I Linux har en proces følgende mulige tilstande:

  • Kører - her kører den enten (det er den aktuelle proces i systemet) eller den er klar til at køre (den venter på at blive tildelt til en af CPU'erne).
  • Venter - i denne tilstand venter en proces på, at en begivenhed skal forekomme eller på en systemressource. Derudover skelner kernen også mellem to typer venteprocesser; afbrydelige venteprocesser - kan afbrydes af signaler og afbrydelige venteprocesser - venter direkte på hardwareforhold og kan ikke afbrydes af nogen begivenhed/signal.
  • Stoppet - i denne tilstand er en proces stoppet, normalt ved at modtage et signal. For eksempel en proces, der debugges.
  • Zombie - her, en proces er død, den er stoppet, men den har stadig en post i procestabellen.

Der er flere Linux-værktøjer til visning/notering af kørende processer på systemet, de to traditionelle og velkendte er topkommandoer:

Det viser oplysninger om et udvalg af de aktive processer på systemet som vist nedenfor:

# ps 
# ps -e | head 

dynamisk realtidsvisning af et kørende system som vist på skærmbilledet nedenfor:

# top 

Læs dette for flere eksempler på topbrug: 12 TOP-kommandoeksempler i Linux

glances er et relativt nyt systemovervågningsværktøj med avancerede funktioner:

# glances

For en omfattende brugsanvisning skal du læse igennem: Glances - Et avanceret realtidsovervågningsværktøj til Linux

Der er flere andre nyttige Linux-systemovervågningsværktøjer, du kan bruge til at liste aktive processer, åbn linket nedenfor for at læse mere om dem:

  1. 20 kommandolinjeværktøjer til overvågning af Linux-ydeevne
  2. 13 Mere nyttige Linux-overvågningsværktøjer

Sådan styres processer i Linux

Linux har også nogle kommandoer til styring af processer som kill, pkill, pgrep og killall. Nedenfor er et par grundlæggende eksempler på, hvordan man bruger dem:

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

For at lære at bruge disse kommandoer dybtgående til at dræbe/afslutte aktive processer i Linux skal du åbne nedenstående links:

  1. En guide til at dræbe, Pkill og Killall-kommandoer til at afslutte Linux-processess
  2. Sådan finder du og dræber kørende processer i Linux

Bemærk, at du kan bruge dem til at dræbe applikationer, der ikke svarer i Linux, når dit system fryser.

Den grundlæggende måde at kontrollere processer i Linux er ved at sende signaler til dem. Der er flere signaler, som du kan sende til en proces for at se alle kørte signaler:

$ kill -l

For at sende et signal til en proces skal du bruge kommandoerne kill, pkill eller pgrep, som vi nævnte tidligere. Men programmer kan kun reagere på signaler, hvis de er programmeret til at genkende disse signaler.

Og de fleste signaler er til intern brug af systemet eller for programmører, når de skriver kode. Følgende er signaler, der er nyttige for en systembruger:

  • SIGHUP 1 - sendt til en proces, når dens styrende terminal er lukket.
  • SIGINT 2 - sendes til en proces af dens styrende terminal, når en bruger afbryder processen ved at trykke på [Ctrl + C] .
  • SIGQUIT 3 - sendt til en proces, hvis brugeren sender et afslutningssignal [Ctrl + D] .
  • SIGKILL 9 - dette signal afslutter (dræber) straks en proces, og processen udfører ingen oprydningsoperationer.
  • SIGTERM 15 - dette er et programtermineringssignal (kill vil sende dette som standard).
  • SIGTSTP 20 - sendt til en proces af dens kontrollerende terminal for at anmode om at stoppe (terminal stop); startet af brugeren ved at trykke på [Ctrl + Z] .

Følgende er eksempler på kill-kommandoer til at dræbe Firefox-applikationen ved hjælp af dens PID, når den fryser:

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

For at dræbe et program ved hjælp af dets navn skal du bruge pkill eller killall sådan:

$ pkill firefox
$ killall firefox 

På Linux-systemet har alle aktive processer en prioritet og en vis god værdi. Processer med højere prioritet får normalt mere CPU-tid end processer med lavere prioritet.

En systembruger med root-privilegier kan dog påvirke dette med kommandoerne nice og renice.

Fra output fra den øverste kommando viser NI processen god værdi:

$ top  

Brug den fine kommando til at indstille en pæn værdi for en proces. Husk, at normale brugere kan tildele en pæn værdi fra nul til 20 til processer, de ejer.
Kun rodbrugeren kan bruge negative pæne værdier.

For at fratage prioriteten for en proces skal du bruge kommandoen renice som følger:

$ renice +8  2687
$ renice +8  2103

Se vores nyttige artikler om, hvordan du styrer og styrer Linux-processer.

  1. Linux-processtyring: Boot, nedlukning og alt imellem
  2. Find top 15-processer efter hukommelsesbrug med 'top' i batch-tilstand
  3. Find mest kørende processer efter højeste hukommelse og CPU-brug i Linux
  4. Sådan finder du et procesnavn ved hjælp af PID-nummer i Linux

Det er alt for nu! Har du spørgsmål eller yderligere ideer, så del dem med os via feedbackformularen nedenfor.