At dræbe en proces er undertiden den eneste måde at slippe af med den. På trods af det barske navn betyder "at dræbe" en proces bare "at tvinge den til at stoppe." Sådan gør du det fra Linux- eller macOS-kommandolinjen.
Hvad er en proces?
At køre programmer som din webbrowser, baggrundsprocesser tilknyttet dit skrivebordsmiljø og Linux-systemtjenester er alle processer.
Du kan klumpe processer i to grupper:
- Forgrundsprocesser er dem, der er startet eller lanceret af en bruger. De kan være i et terminalvindue, eller de kan være en grafisk applikation.
- Baggrundsprocesser er alle de processer, der startes automatisk og ikke har nogen interaktion med brugerne. De forventer ikke input fra brugere og præsenterer heller ikke resultater eller output for dem. Baggrundsprocesser er ting som tjenester og dæmoner.
Hvis forgrundsprocesserne er fronten for teaterpersonalet og skuespillerne, er baggrundsprocesserne bag kulisserne "bag kulisserne".
Når processer opfører sig forkert eller fungerer forkert, kan de hogge for meget CPU-tid, forbruge din RAM eller gå ind i en stram beregningsløbe og ikke reagere. Grafiske applikationer kan nægte at svare på museklik. Terminalapplikationer returnerer dig muligvis aldrig til kommandoprompten.
Det humane svar
"At dræbe" en proces betyder bare "at tvinge processen til at afslutte." Dette kan være nødvendigt, hvis processen nægter at svare.
Linux leverer
dræbe
,
pkill
og
Dræb alle
kommandoer, der giver dig mulighed for netop det. Disse kommandoer kan bruges med enhver form for proces, grafisk eller kommandolinje, forgrund eller baggrund.
Drabkommandoen
At bruge
dræbe
, skal du kende proces-id (PID) for den proces, du vil afslutte. Det
ps
kommando kan bruges til at finde PID for en proces.
At have
ps
søg gennem alle processerne, brug
-er
(alle processer) mulighed. Rør output gennem
mindre
er tilrådeligt, vil der være en hel del af det. Type
ps
, et rum,
-er
, et rum,
|
(et rørkarakter), et andet mellemrum og skriv derefter
mindre
. Tryk på Enter for at udføre kommandoen.
ps -e | mindre
Dette giver dig en procesliste, der ligner nedenstående skærmbillede. Du kan søge fremad
mindre
bruger
/
tasten, og du kan søge baglæns ved hjælp af
?
nøgle.
For at komme ind på den proces, du er interesseret i, rør output fra
ps
igennem
greb
og angiv navnet - eller en del af navnet - på processen.
ps -e | grep-skydespil
Når du har fundet PID for den proces, du vil afslutte, skal du sende den til
dræbe
kommando som parameter. At afslutte
lukker
proces identificeret ved den forrige kommando, brug denne kommando:
dræb 2099
Det
dræbe
kommando er en tavs snigmorder - den giver dig ikke feedback, hvis den var vellykket.
Pkill-kommandoen
Det
pkill
kommando giver dig mulighed for at dræbe en proces - eller processer - ved navn. Du behøver ikke identificere processen ved hjælp af PID. At bruge
pkill
du angiver et søgeudtryk, der
pkill
bruger til at kontrollere listen over kørende processer. Matchingsprocesser afsluttes. Så du skal være positiv, du har det søgeudtryk stavet korrekt.
Som sikkerhedsnet kan du bruge
pgrep
kommando
Før
du bruger
pkill
kommando. Det
pgrep
kommando accepterer også et søgeudtryk. Den viser PID for hver proces, der matcher søgeudtrykket. Dette er sikkert fordi
pgrep
udsender ikke noget dræbningssignal til processerne, og hvis du fejler søgeordet, dræber du ikke en anden proces ved en fejltagelse. Du kan sikre dig, at søgeudtrykket er gennemtænkt korrekt, før du sender det til
pkill
. Begge
pkill
og
pgrep
behandle søgeudtrykket på samme måde. Deres behandling er så ens, at de
del den samme mandside
.
Lad os antage, at der er en proces med "subq" i dets navn. Vi bruger
ps -u dave | grep
kommando om at kigge bag gardinet. Du kan se, at "subq" vil matche den proces og den proces alene. Det var bare så du kan se det fulde navn på processen.
ps -u dave | grep subq
Lad os antage vores bruger
har ikke
gjort det; alt hvad de ved, er, at procesnavnet indeholder understrenget "subq." De bruger
pgrep
for at kontrollere, at der kun er et match med søgeudtrykket. De bruger derefter søgeudtrykket med
pkill
.
pgrep subq
pkill subq
Du kan bruge
pkill
at dræbe flere processer på én gang. Her kører brugeren
pgrep
for at kontrollere, hvor mange processer Chrome har lanceret. De bruger
pkill
at dræbe dem alle. De tjekker derefter med
pgrep
at de alle er blevet fjernet.
pgrep krom
pkill krom
pgrep krom
Hvis flere processer med samme navn kører, men du ikke vil dræbe dem alle, kan du bruge
pgrep
med
-f
(kommandolinje) mulighed for at identificere, hvilken proces der er hvilken. Et simpelt eksempel ville være to
ping
processer. Du vil dræbe en af dem, men ikke den anden. Du kan bruge deres kommandolinjer til at skelne mellem dem. Bemærk brugen af anførselstegn til at omslutte kommandolinjeparameteren.
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"
Killall-kommandoen
Advarsel
: I operativsystemerne Solaris og OpenIndiana
Dræb alle
kommando vil
dræb alle de processer, der tilhører dig
. Hvis er rod, eller hvis du har udstedt
sudo killall
du genstarter din computer! Under undersøgelsen af denne artikel blev denne adfærd bekræftet med den nyeste version af OpenIndiana Hipster 2018.10.
Det
Dræb alle
kommando
fungerer på samme måde
til
pkill
kommando, men med en bestemt forskel. I stedet for at videregive et søgeudtryk til kommandoen skal du angive det nøjagtige procesnavn.
Du kan ikke give et delvist match til et procesnavn. du skal angive hele procesnavnet som vist:
killall lukker
killall lukker
Det
-Y
(yngre end) giver dig mulighed for at dræbe processer, der har kørt i
mindre
end en bestemt periode. Perioden er angivet i tal efterfulgt af en af disse enheder:
- s (sekunder)
- m (minutter)
- h (timer)
- d (dage)
- w (uger)
- M (måneder, note, kapital "M")
- y (år)
At dræbe en proces kaldet
mor
der netop er lanceret og efterlader eventuelle ældre forekomster af
mor
kører, kan du bruge følgende parametre med
Dræb alle
, hvis du havde reageret inden for to minutter:
Mindsk mig eller mig
Det
-Det
(ældre end) giver dig mulighed for at dræbe processer, der har kørt i længere tid end en bestemt periode. Denne kommando vil dræbe alle
ssh
forbindelser, der har kørt i mere end en dag:
killall -o 1d sshd
Vær ikke for udløsende glad
Disse kommandoer giver dig mulighed for at identificere og afslutte fejlagtige processer med nøjagtighed og sikkerhed korrekt.
Vær altid forsigtig. Først skal du sørge for, at den proces, du er ved at dræbe, virkelig er den, du ønsker. For det andet skal du dobbelttjekke - vær forsigtig, og sørg for, at den målrettede proces er den, du vil afslutte. Fortsæt med at afslutte processen, når du er tilfreds.