Hvordan drepe prosesser fra Linux-terminalen

Å drepe en prosess er noen ganger den eneste måten å bli kvitt den på. Til tross for det harde navnet, betyr å «drepe» en prosess bare «tvinge den til å slutte.» Slik gjør du det fra Linux- eller macOS-kommandolinjen.

Hva er en prosess?

Å kjøre programmer som nettleseren din, bakgrunnsprosesser knyttet til skrivebordsmiljøet og Linux-systemtjenester er alle prosesser.

Du kan dele prosesser i to grupper:

Forgrunnsprosesser er prosesser som er startet eller lansert av en bruker. De kan være i et terminalvindu, eller de kan være en grafisk applikasjon.
Bakgrunnsprosesser er alle prosessene som startes automatisk og som ikke har noen interaksjon med brukere. De forventer ikke innspill fra brukere og presenterer heller ikke resultater eller utdata for dem. Bakgrunnsprosesser er ting som tjenester og demoner.

Hvis forgrunnsprosessene er fronten til teaterpersonalet og skuespillerne, er bakgrunnsprosessene backstage «behind the scenes»-teamet.

Når prosesser oppfører seg feil eller ikke fungerer, kan de bruke for mye CPU-tid, forbruke RAM-en din eller gå inn i en tett beregningssløyfe og ikke reagere. Grafiske applikasjoner kan nekte å svare på museklikk. Terminalapplikasjoner vil kanskje aldri returnere deg til ledeteksten.

Det humane svaret

Å «drepe» en prosess betyr bare «å tvinge prosessen til å avslutte». Dette kan være nødvendig hvis prosessen nekter å svare.

Linux gir kommandoene kill, pkill og killall for å tillate deg å gjøre nettopp det. Disse kommandoene kan brukes med alle typer prosesser, grafisk eller kommandolinje, forgrunn eller bakgrunn.

Drapskommandoen

For å bruke kill, må du kjenne prosess-ID (PID) til prosessen du ønsker å avslutte. ps-kommandoen kan brukes til å finne PID for en prosess.

  Hvordan sette prosessprioriteter med nice og renice på Linux

For å få ps til å søke gjennom alle prosessene, bruk alternativet -e (alle prosesser). Det er tilrådelig å røre utgangen gjennom mindre, det kommer til å bli ganske mye av det. Skriv ps, et mellomrom, -e, et mellomrom, | (et rørtegn), et annet mellomrom og skriv deretter mindre. Trykk Enter for å utføre kommandoen.

ps -e | less

Dette vil gi deg en prosessoppføring som ligner på skjermbildet nedenfor. Du kan søke fremover med mindre ved å bruke /-tasten, og du kan søke bakover ved å bruke ? nøkkel.

For å komme inn på prosessen du er interessert i, kan du sende utdataene fra ps gjennom grep og spesifisere navnet – eller en del av navnet – på prosessen.

ps -e | grep shutter

Når du har funnet PID-en til prosessen du ønsker å avslutte, sender du den til kill-kommandoen som en parameter. For å avslutte lukkerprosessen identifisert av forrige kommando, bruk denne kommandoen:

kill 2099

Kill-kommandoen er en stille leiemorder – den gir deg ingen tilbakemelding om den var vellykket.

Pkill-kommandoen

Pkill-kommandoen lar deg drepe en prosess – eller prosesser – ved navn. Du trenger ikke identifisere prosessen med PID. For å bruke pkill oppgir du et søkeord som pkill bruker for å sjekke mot listen over kjørende prosesser. Matchingsprosesser avsluttes. Så du må være sikker på at du har stavet søkeordet riktig.

Som et sikkerhetsnett kan du bruke pgrep-kommandoen før du bruker pkill-kommandoen. Pgrep-kommandoen godtar også et søkeord. Den vil vise PID for hver prosess som samsvarer med søkeordet. Dette er trygt fordi pgrep ikke vil gi noe kill-signal til prosessene, og hvis du skriver feil søkeord, vil du ikke drepe en annen prosess ved en feiltakelse. Du kan sørge for at du har gjennomtenkt søkeordet riktig før du sender det til pkill. Både pkill og pgrep behandler søkeordet på samme måte. Behandlingen deres er så lik at de dele den samme man-siden.

  Hvordan spille Sniper Elite på Linux

La oss anta at det er en prosess med «subq» i navnet. Vi bruker ps -u dave | grep-kommandoen for å få en titt bak gardinen. Du kan se at «subq» vil matche den prosessen og den prosessen alene. Det var bare slik at du kan se hele navnet på prosessen.

ps -u dave | grep subq

La oss anta at brukeren vår ikke har gjort det; alt de vet er at prosessnavnet inneholder understrengen «subq.» De bruker pgrep for å sjekke at det kun er ett samsvar med søkeordet. De bruker deretter det søkeordet med pkill.

pgrep subq
pkill subq

Du kan bruke pkill til å drepe flere prosesser samtidig. Her kjører brukeren pgrep for å sjekke hvor mange prosesser Chrome har startet. De bruker pkill for å drepe dem alle. De sjekker da med pgrep at de alle er fjernet.

pgrep chrome
pkill chrome
pgrep chrome

Hvis flere prosesser med samme navn kjører, men du ikke vil drepe dem alle, kan du bruke pgrep med -f (kommandolinje) alternativet for å identifisere hvilken prosess som er hvilken. Et enkelt eksempel kan være to ping-prosesser. Du vil drepe en av dem, men ikke den andre. Du kan bruke kommandolinjene deres for å skille mellom dem. Legg merke til bruken av anførselstegn for å bryte kommandolinjeparameteren.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

The killall Command

Advarsel: I operativsystemene Solaris og OpenIndiana vil killall-kommandoen drepe alle prosessene som tilhører deg. Hvis er root eller hvis du har utstedt sudo killall vil du starte datamaskinen på nytt! Under forskningen for denne artikkelen ble denne oppførselen bekreftet med den nyeste versjonen av OpenIndiana Hipster 2018.10.

  Hvordan spille Super Flight på Linux

Killall-kommandoen fungerer på lignende måte til pkill-kommandoen, men med en spesifikk forskjell. I stedet for å sende et søkeord til kommandoen må du oppgi det nøyaktige prosessnavnet.

Du kan ikke gi et delvis samsvar til et prosessnavn; du må oppgi hele prosessnavnet, som vist:

killall shutt
killall shutter

Alternativet -y (yngre enn) lar deg drepe prosesser som har kjørt i mindre enn en spesifisert periode. Perioden er gitt i tall etterfulgt av en av disse enhetene:

s (sekunder)
m (minutter)
t (timer)
d (dager)
w (uker)
M (måneder, merk, stor «M»)
y (år)

For å drepe en prosess kalt ana som nettopp har blitt startet og la eventuelle eldre forekomster av ana kjøre, kan du bruke følgende parametere med killall, hvis du hadde reagert innen to minutter:

killall -y 2m ana

Alternativet -o (eldre enn) lar deg drepe prosesser som har kjørt lenger enn en spesifisert periode. Denne kommandoen vil drepe alle ssh-tilkoblinger som har kjørt i mer enn en dag:

killall -o 1d sshd

Ikke vær for triggerglad

Disse kommandoene lar deg identifisere og avslutte feilaktige prosesser med nøyaktighet og sikkerhet på riktig måte.

Vær alltid forsiktig. Først, sørg for at prosessen du er i ferd med å drepe virkelig er den du ønsker. For det andre, dobbeltsjekk – vær forsiktig og sørg for at den målrettede prosessen er den du vil avslutte. Fortsett med å avslutte prosessen når du er fornøyd.