Hur man dödar processer från Linux-terminalen

Att döda en process är ibland det enda sättet att bli av med den. Trots det hårda namnet betyder ”att döda” en process bara ”tvinga den att sluta.” Så här gör du det från kommandoraden i Linux eller macOS.

Vad är en process?

Att köra program som din webbläsare, bakgrundsprocesser associerade med din skrivbordsmiljö och Linux-systemtjänster är alla processer.

Du kan dela processer i två grupper:

Förgrundsprocesser är sådana som har startats eller lanserats av en användare. De kan vara i ett terminalfönster, eller så kan de vara en grafisk applikation.
Bakgrundsprocesser är alla processer som startas automatiskt och som inte har någon interaktion med användarna. De förväntar sig inte input från användarna och de presenterar inte heller resultat eller utdata för dem. Bakgrundsprocesser är saker som tjänster och demoner.

Om förgrundsprocesserna är teaterpersonalens och skådespelarnas framsida, är bakgrundsprocesserna backstage-teamet ”bakom kulisserna”.

När processer inte beter sig eller inte fungerar kan de ta för mycket CPU-tid, förbruka ditt RAM-minne eller gå in i en snäv beräkningsslinga och sluta svara. Grafiska applikationer kan vägra att svara på musklick. Terminalapplikationer kanske aldrig returnerar dig till kommandotolken.

Det humana svaret

Att ”döda” en process betyder bara att ”tvinga processen att sluta.” Detta kan vara nödvändigt om processen vägrar att svara.

Linux tillhandahåller kommandona kill, pkill och killall så att du kan göra just det. Dessa kommandon kan användas med vilken typ av process som helst, grafisk eller kommandorad, förgrund eller bakgrund.

Dödskommandot

För att använda kill måste du känna till process-ID (PID) för den process du vill avsluta. Kommandot ps kan användas för att hitta PID för en process.

För att få ps att söka igenom alla processer använd alternativet -e (alla processer). Det är lämpligt att röra utgången genom mindre, det kommer att bli en hel del av det. Skriv ps, ett mellanslag, -e, ett mellanslag, | (ett rörtecken), ett annat mellanslag och skriv sedan mindre. Tryck på Enter för att utföra kommandot.

ps -e | less

Detta ger dig en processlista som liknar skärmdumpen nedan. Du kan söka framåt på mindre med /-tangenten och du kan söka bakåt med ? nyckel.

För att komma in på processen du är intresserad av, skicka utdata från ps till grep och ange namnet – eller en del av namnet – på processen.

ps -e | grep shutter

När du har hittat PID för processen du vill avsluta, skicka den till kill-kommandot som en parameter. För att avsluta slutarprocessen som identifierats av föregående kommando, använd det här kommandot:

kill 2099

Kill-kommandot är en tyst lönnmördare – det ger dig ingen feedback om det lyckades.

Pkill-kommandot

Kommandot pkill låter dig döda en process – eller processer – med namn. Du behöver inte identifiera processen med PID. För att använda pkill anger du en sökterm som pkill använder för att kontrollera mot listan över pågående processer. Matchningsprocesser avslutas. Så du måste vara säker på att du har stavat söktermen korrekt.

Som ett skyddsnät kan du använda kommandot pgrep innan du använder kommandot pkill. Kommandot pgrep accepterar också en sökterm. Den kommer att lista PID för varje process som matchar söktermen. Detta är säkert eftersom pgrep inte kommer att ge någon dödningssignal till processerna, och om du skriver fel söktermen kommer du inte att döda en annan process av misstag. Du kan se till att du har rätt genomtänkt söktermen innan du skickar den till pkill. Både pkill och pgrep behandlar söktermen på samma sätt. Deras behandling är så lik att de dela samma man-sida.

Låt oss anta att det finns en process med ”subq” i dess namn. Vi kommer att använda ps -u dave | grep-kommandot för att få en titt bakom gardinen. Du kan se att ”subq” kommer att matcha den processen och bara den processen. Det var bara så att du kan se hela namnet på processen.

ps -u dave | grep subq

Låt oss anta att vår användare inte har gjort det; allt de vet är att processnamnet innehåller delsträngen ”subq.” De använder pgrep för att kontrollera att det bara finns en matchning till söktermen. De använder sedan den söktermen med pkill.

pgrep subq
pkill subq

Du kan använda pkill för att döda flera processer samtidigt. Här kör användaren pgrep för att kontrollera hur många processer Chrome har startat. De använder pkill för att döda dem alla. De kontrollerar sedan med pgrep att de alla har tagits bort.

pgrep chrome
pkill chrome
pgrep chrome

Om flera processer med samma namn körs, men du inte vill döda dem alla, kan du använda pgrep med alternativet -f (kommandorad) för att identifiera vilken process som är vilken. Ett enkelt exempel skulle vara två ping-processer. Du vill döda en av dem men inte den andra. Du kan använda deras kommandorader för att skilja mellan dem. Observera användningen av citattecken för att radbryta kommandoradsparametern.

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

Killall Command

Varning: I operativsystemen Solaris och OpenIndiana kommer killall-kommandot att döda alla processer som tillhör dig. Om är root eller om du har utfärdat sudo killall kommer du att starta om din dator! Under forskningen för den här artikeln bekräftades detta beteende med den senaste versionen av OpenIndiana Hipster 2018.10.

Killall-kommandot fungerar på liknande sätt till kommandot pkill men med en specifik skillnad. Istället för att skicka en sökterm till kommandot måste du ange det exakta processnamnet.

Du kan inte tillhandahålla en partiell matchning till ett processnamn; du måste ange hela processens namn, som visas:

killall shutt
killall shutter

Alternativet -y (yngre än) låter dig döda processer som har körts under mindre än en angiven period. Perioden anges i siffror följt av en av dessa enheter:

s (sekunder)
m (minuter)
h (timmar)
d (dagar)
w (veckor)
M (månader, anm. versalt ”M”)
y (år)

För att döda en process som heter ana som just har startat och lämna alla äldre instanser av ana igång, kan du använda följande parametrar med killall, om du hade reagerat inom två minuter:

killall -y 2m ana

Alternativet -o (äldre än) låter dig döda processer som har körts längre än en angiven period. Detta kommando kommer att döda alla ssh-anslutningar som har körts längre än en dag:

killall -o 1d sshd

Var inte för triggerglad

Dessa kommandon låter dig identifiera och avsluta felaktiga processer med noggrannhet och säkerhet korrekt.

Var alltid försiktig. Se först till att processen du är på väg att döda verkligen är den du vill ha. För det andra, dubbelkolla — var försiktig och se till att den målinriktade processen är den du vill avsluta. Fortsätt med att avsluta processen när du är nöjd.