At dræbe en proces er nogle gange 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 holde op.” Sådan gør du det fra Linux- eller macOS-kommandolinjen.
Indholdsfortegnelse
Hvad er en proces?
Kørsel af programmer som din webbrowser, baggrundsprocesser forbundet med dit skrivebordsmiljø og Linux-systemtjenester er alle processer.
Du kan dele processer i to grupper:
Forgrundsprocesser er dem, der er blevet 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 brugerne og præsenterer heller ikke resultater eller output for dem. Baggrundsprocesser er ting som tjenester og dæmoner.
Hvis forgrundsprocesserne er teaterpersonalets og skuespillernes front, er baggrundsprocesserne backstage “bag kulisserne”-teamet.
Når processer opfører sig forkert eller ikke fungerer, kan de tømme for meget CPU-tid, forbruge din RAM eller komme ind i en stram beregningsløkke og blive uresponsive. Grafiske applikationer kan nægte at reagere på museklik. Terminalapplikationer returnerer dig muligvis aldrig til kommandoprompten.
Det humane svar
“At dræbe” en proces betyder bare “at tvinge processen til at stoppe.” Dette kan være nødvendigt, hvis processen nægter at svare.
Linux giver kommandoerne kill, pkill og killall for at give dig mulighed for at gøre netop det. Disse kommandoer kan bruges med enhver type proces, grafisk eller kommandolinje, forgrund eller baggrund.
Dræb-kommandoen
For at bruge kill skal du kende proces-id’et (PID) for den proces, du ønsker at afslutte. ps-kommandoen kan bruges til at finde PID for en proces.
For at få ps til at søge gennem alle processerne, brug -e (alle processer) muligheden. Det er tilrådeligt at røre outputtet igennem mindre, der kommer til at være en del af det. Skriv ps, et mellemrum, -e, et mellemrum, | (et rørtegn), et andet mellemrum og skriv så mindre. Tryk på Enter for at udføre kommandoen.
ps -e | less
Dette vil give dig en procesliste, der ligner nedenstående skærmbillede. Du kan søge frem på mindre ved at bruge / tasten, og du kan søge tilbage ved at bruge ? nøgle.
For at komme ind på den proces, du er interesseret i, skal du sende output fra ps gennem grep og angive navnet – eller en del af navnet – på processen.
ps -e | grep shutter
Når du har fundet PID’en for den proces, du ønsker at afslutte, skal du sende den til kill-kommandoen som en parameter. For at afslutte lukkerprocessen identificeret af den forrige kommando, skal du bruge denne kommando:
kill 2099
Dræb-kommandoen er en stille snigmorder – den giver dig ingen feedback, hvis den var vellykket.
Pkill-kommandoen
Kommandoen pkill giver dig mulighed for at dræbe en proces – eller processer – ved navn. Du behøver ikke at identificere processen ved PID. For at bruge pkill angiver du en søgeterm, som pkill bruger til at kontrollere mod listen over kørende processer. Matchningsprocesser afsluttes. Så du skal være sikker på, at du har stavet søgeordet korrekt.
Som et sikkerhedsnet kan du bruge kommandoen pgrep, før du bruger kommandoen pkill. Kommandoen pgrep accepterer også en søgeterm. Den vil vise PID for hver proces, der matcher søgetermen. Dette er sikkert, fordi pgrep ikke vil udsende noget kill-signal til processerne, og hvis du indtaster søgeordet forkert, vil du ikke dræbe en anden proces ved en fejl. Du kan sikre dig, at du har gennemtænkt søgetermen korrekt, før du videregiver den til pkill. Både pkill og pgrep behandler søgeordet på samme måde. Deres behandling er så ens, at de dele den samme man-side.
Lad os antage, at der er en proces med “subq” i navnet. Vi bruger ps -u dave | grep kommando for at få et kig 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, at vores bruger ikke har gjort det; alt, hvad de ved, er, at procesnavnet indeholder understrengen “subq.” De bruger pgrep til at kontrollere, at der kun er ét match til søgeordet. De bruger så det søgeord med pkill.
pgrep subq
pkill subq
Du kan bruge pkill til at dræbe flere processer på én gang. Her kører brugeren pgrep for at kontrollere, hvor mange processer Chrome har startet. De bruger pkill til at dræbe dem alle. De tjekker derefter med pgrep, at de alle er blevet fjernet.
pgrep chrome
pkill chrome
pgrep chrome
Hvis flere processer med samme navn kører, men du ikke ønsker at dræbe dem alle, kan du bruge pgrep med -f (kommandolinjen) mulighed for at identificere, hvilken proces der er hvilken. Et simpelt eksempel ville være to ping-processer. Du vil dræbe den ene af dem, men ikke den anden. Du kan bruge deres kommandolinjer til at skelne mellem dem. Bemærk brugen af anførselstegn til at ombryde kommandolinjeparameteren.
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"
Killall-kommandoen
Advarsel: I operativsystemerne Solaris og OpenIndiana vil killall-kommandoen dræbe alle de processer, der tilhører dig. Hvis du er root, eller hvis du har udstedt sudo killall, genstarter du din computer! Under forskningen til denne artikel blev denne adfærd bekræftet med den seneste version af OpenIndiana Hipster 2018.10.
Killall-kommandoen fungerer på lignende måde til pkill-kommandoen, men med en specifik forskel. I stedet for at sende en søgeterm til kommandoen skal du angive det nøjagtige procesnavn.
Du kan ikke angive et delvist match til et procesnavn; du skal angive hele procesnavnet, som vist:
killall shutt
killall shutter
Indstillingen -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, bemærk, stort “M”)
y (år)
For at dræbe en proces kaldet ana, der lige er blevet lanceret og lade alle ældre forekomster af ana køre, kan du bruge følgende parametre med killall, hvis du havde reageret inden for to minutter:
killall -y 2m ana
Indstillingen -o (ældre end) giver dig mulighed for at dræbe processer, der har kørt i længere tid end en specificeret 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 triggerglad
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 sikre dig, at den proces, du er ved at dræbe, virkelig er den, du ønsker. For det andet, dobbelttjek – 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.