Alt du trenger å vite om prosesser i Linux [Omfattende veiledning]


I denne artikkelen vil vi gå gjennom en grunnleggende forståelse av prosesser og kort se på hvordan du administrerer prosesser i Linux ved hjelp av visse kommandoer.

En prosess refererer til et program under utførelse; det er en kjørende forekomst av et program. Den består av programinstruksjonen, data lest fra filer, andre programmer eller input fra en systembruker.

Det er grunnleggende to typer prosesser i Linux:

  • Forgrunnsprosesser (også referert til som interaktive prosesser) – disse initialiseres og kontrolleres gjennom en terminaløkt. Med andre ord, det må være en bruker koblet til systemet for å starte slike prosesser; de har ikke startet automatisk som en del av systemfunksjonene/tjenestene.
  • Bakgrunnsprosesser (også referert til som ikke-interaktive/automatiske prosesser) – er prosesser som ikke er koblet til en terminal; de forventer ingen brukerinndata.

Dette er spesielle typer bakgrunnsprosesser som starter ved systemstart og fortsetter å kjøre for alltid som en tjeneste; de dør ikke. De startes som systemoppgaver (kjøres som tjenester), spontant. De kan imidlertid kontrolleres av en bruker via init-prosessen.

Oppretting av prosesser i Linux

En ny prosess opprettes normalt når en eksisterende prosess lager en nøyaktig kopi av seg selv i minnet. Den underordnede prosessen vil ha samme miljø som den overordnede, men bare prosess-ID-nummeret er forskjellig.

Det er to konvensjonelle måter som brukes for å lage en ny prosess i Linux:

  • Bruke System()-funksjonen – denne metoden er relativt enkel, men den er ineffektiv og har betydelige sikkerhetsrisikoer.
  • Bruke funksjonene fork() og exec() – denne teknikken er litt avansert, men gir større fleksibilitet, hastighet, sammen med sikkerhet.

Hvordan identifiserer Linux prosesser?

Fordi Linux er et flerbrukersystem, noe som betyr at forskjellige brukere kan kjøre forskjellige programmer på systemet, må hver kjørende forekomst av et program identifiseres unikt av kjernen.

Og et program identifiseres av sin prosess-ID (PID) så vel som dets overordnede prosess-ID (PPID), derfor kan prosesser videre kategoriseres i:

  • Overordnede prosesser – dette er prosesser som skaper andre prosesser under kjøring.
  • Underordnede prosesser – disse prosessene opprettes av andre prosesser under kjøring.

Init-prosessen er mor (forelder) til alle prosesser på systemet, det er det første programmet som kjøres når Linux-systemet starter opp; den administrerer alle andre prosesser på systemet. Den startes av selve kjernen, så i prinsippet har den ikke en overordnet prosess.

Init-prosessen har alltid prosess-ID på 1. Den fungerer som en adoptivforelder for alle foreldreløse prosesser.

Du kan bruke pidof-kommandoen for å finne ID-en til en prosess:

# pidof systemd
# pidof top
# pidof httpd

For å finne prosess-ID og overordnet prosess-ID for gjeldende skall, kjør:

$ echo $$
$ echo $PPID

Når du kjører en kommando eller et program (for eksempel cloudcmd – CloudCommander), vil det starte en prosess i systemet. Du kan starte en forgrunnsprosess (interaktiv) som følger, den vil bli koblet til terminalen og en bruker kan sende inn den:

# cloudcmd

For å starte en prosess i bakgrunnen (ikke-interaktiv), bruk &-symbolet, her leser ikke prosessen inndata fra en bruker før den er flyttet til forgrunnen.

# cloudcmd &
# jobs

Du kan også sende en prosess til bakgrunnen ved å suspendere den ved å bruke [Ctrl + Z], dette vil sende SIGSTOP-signalet til prosessen, og dermed stoppe dens operasjoner; den blir ledig:

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

For å fortsette å kjøre den suspenderte kommandoen ovenfor i bakgrunnen, bruk bg-kommandoen:

# bg

For å sende en bakgrunnsprosess til forgrunnen, bruk fg-kommandoen sammen med jobb-ID-en slik:

# jobs
# fg %1

Du kan også like: Hvordan starte Linux-kommando i bakgrunnen og løsne prosess i terminal

Under utførelse endres en prosess fra en tilstand til en annen avhengig av dens miljø/omstendigheter. I Linux har en prosess følgende mulige tilstander:

  • Kjører – her kjører den enten (det er den gjeldende prosessen i systemet) eller den er klar til å kjøre (den venter på å bli tildelt en av CPU-ene).
  • Venter – i denne tilstanden venter en prosess på at en hendelse skal inntreffe eller på en systemressurs. I tillegg skiller kjernen også mellom to typer venteprosesser; avbrytbare venteprosesser – kan avbrytes av signaler og uavbruddsfrie venteprosesser – venter direkte på maskinvareforhold og kan ikke avbrytes av noen hendelse/signal.
  • Stoppet – i denne tilstanden har en prosess blitt stoppet, vanligvis ved å motta et signal. For eksempel en prosess som blir feilsøkt.
  • Zombie – her er en prosess død, den har blitt stoppet, men den har fortsatt en oppføring i prosesstabellen.

Det er flere Linux-verktøy for å vise/liste kjørende prosesser på systemet, de to tradisjonelle og velkjente er toppkommandoer:

Den viser informasjon om et utvalg av de aktive prosessene på systemet som vist nedenfor:

# ps 
# ps -e | head 

dynamisk sanntidsvisning av et kjørende system som vist på skjermbildet nedenfor:

# top 

Les dette for flere eksempler på toppbruk: 12 TOP Kommandoeksempler i Linux

glances er et relativt nytt systemovervåkingsverktøy med avanserte funksjoner:

# glances

For en omfattende bruksguide, les gjennom: Glances – An Advanced Real Time System Monitoring Tool for Linux

Det er flere andre nyttige Linux-systemovervåkingsverktøy du kan bruke for å liste opp aktive prosesser, åpne lenken nedenfor for å lese mer om dem:

  1. 20 kommandolinjeverktøy for å overvåke Linux-ytelse
  2. 13 flere nyttige Linux-overvåkingsverktøy

Hvordan kontrollere prosesser i Linux

Linux har også noen kommandoer for å kontrollere prosesser som kill, pkill, pgrep og killall, nedenfor er noen grunnleggende eksempler på hvordan du bruker dem:

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

For å lære hvordan du bruker disse kommandoene i dybden, for å drepe/avslutte aktive prosesser i Linux, åpne koblingene nedenfor:

  1. En guide til Kill-, Pkill- og Killall-kommandoer for å avslutte Linux-prosesser
  2. Hvordan finne og drepe kjørende prosesser i Linux

Merk at du kan bruke dem til å drepe programmer som ikke reagerer i Linux når systemet fryser.

Den grunnleggende måten å kontrollere prosesser i Linux på er å sende signaler til dem. Det er flere signaler du kan sende til en prosess for å se alle signalene som kjøres:

$ kill -l

For å sende et signal til en prosess, bruk kill-, pkill- eller pgrep-kommandoene vi nevnte tidligere. Men programmer kan bare svare på signaler hvis de er programmert til å gjenkjenne disse signalene.

Og de fleste signaler er for intern bruk av systemet, eller for programmerere når de skriver kode. Følgende er signaler som er nyttige for en systembruker:

  • SIGHUP 1 – sendt til en prosess når dens kontrollerende terminal er stengt.
  • SIGINT 2 – sendt til en prosess av dens kontrollerende terminal når en bruker avbryter prosessen ved å trykke [Ctrl+C].
  • SIGQUIT 3 – sendes til en prosess hvis brukeren sender et avslutningssignal [Ctrl+D].
  • SIGKILL 9 – dette signalet avslutter (dreper) umiddelbart en prosess og prosessen vil ikke utføre noen oppryddingsoperasjoner.
  • SIGTERM 15 – dette er et programavslutningssignal (kill sender dette som standard).
  • SIGTSTP 20 – sendt til en prosess av dens kontrollerende terminal for å be om at den stopper (terminalstopp); initiert av at brukeren trykker på [Ctrl+Z].

Følgende er eksempler på kill-kommandoer for å drepe Firefox-applikasjonen ved å bruke PID-en når den fryser:

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

For å drepe en applikasjon ved å bruke navnet, bruk pkill eller killall slik:

$ pkill firefox
$ killall firefox 

På Linux-systemet har alle aktive prosesser en prioritet og en viss god verdi. Prosesser med høyere prioritet vil normalt få mer CPU-tid enn lavere prioriterte prosesser.

En systembruker med root-privilegier kan imidlertid påvirke dette med kommandoene nice og renice.

Fra utgangen av toppkommandoen viser NI prosessen hyggelig verdi:

$ top  

Bruk nice-kommandoen for å angi en fin verdi for en prosess. Husk at vanlige brukere kan tilskrive en god verdi fra null til 20 til prosesser de eier.
Bare root-brukeren kan bruke negative fine verdier.

For å oppheve prioritet til en prosess, bruk renice-kommandoen som følger:

$ renice +8  2687
$ renice +8  2103

Sjekk ut noen nyttige artikler om hvordan du administrerer og kontrollerer Linux-prosesser.

  1. Linux-prosessbehandling: Oppstart, avslutning og alt i mellom
  2. Finn topp 15 prosesser etter minnebruk med «topp» i batchmodus
  3. Finn de mest populære prosessene etter høyeste minne- og CPU-bruk i Linux
  4. Hvordan finne et prosessnavn ved å bruke PID-nummer i Linux

Det er alt for nå! Har du spørsmål eller flere ideer, del dem med oss via tilbakemeldingsskjemaet nedenfor.