Så här dödar du en process eller stoppar ett program i Linux

När en process beter sig illa kan du ibland vilja avsluta eller döda den. I det här inlägget ska vi utforska några sätt att avsluta en process eller ett program både från kommandoraden och från ett grafiskt gränssnitt, med gedit som exempelprogram.

Användning av kommandoraden/avslutningstecken

Ctrl + C

Ett problem med att åberopa gedit från kommandoraden (om du inte använder gedit &) är att det inte frigör prompten, så att shell-sessionen är blockerad. I sådana fall är Ctrl+C (Control-tangenten i kombination med ”C”) praktiskt. Det kommer att avsluta gedit och allt arbete kommer att gå förlorat (om inte filen sparades). Ctrl+C skickar signalen SIGINT till gedit. Detta är en stoppsignal vars standardåtgärd är att avsluta processen. Den instruerar skalet att stoppa gedit och återgå till huvudslingan, och du får prompten tillbaka.

$ gedit
^C

Ctrl + Z

Detta kallas för ett suspenderande tecken. Det skickar en SIGTSTP-signal till processen. Detta är också en stoppsignal, men standardåtgärden är inte att döda utan att avbryta processen.

Det stoppar (dödar/avsluter) gedit och återställer skalprompten.

$ gedit
^Z
+ Stopped gedit
$

När processen har avbrutits (i det här fallet gedit) är det inte möjligt att skriva eller göra något i gedit. I bakgrunden blir processen ett jobb. Detta kan verifieras med kommandot jobs.

$ jobs
+ Stopped gedit

jobs gör det möjligt att styra flera processer inom en enda shellsession. Du kan stoppa, återuppta och flytta jobb till bakgrunden eller förgrunden efter behov.

Låt oss återuppta gedit i bakgrunden och frigöra en prompt för att köra andra kommandon. Du kan göra detta med kommandot bg, följt av jobb-ID (lägg märke till i utmatningen av jobs ovan. är jobb-ID).

$ bg 1
+ gedit &

Detta liknar att starta gedit med &,:

 $ gedit &

Användning av kill

kill ger fin kontroll över signaler, och gör det möjligt för dig att signalera en process genom att specificera antingen ett signalnamn eller ett signalnummer, följt av ett process-ID, eller PID.

Det som jag tycker om med kill är att det också kan fungera med jobb-ID. Låt oss starta gedit i bakgrunden med hjälp av gedit &. Om vi antar att jag har ett jobb-ID på gedit från kommandot jobs, skickar vi SIGINT till gedit:

 $ kill -s SIGINT %1

Notera att jobb-ID:t bör föregås av %, annars kommer kill att betrakta det som ett PID.

kill kan fungera utan att ange en signal uttryckligen. I det fallet är standardåtgärden att skicka SIGTERM, vilket avslutar processen. Exekvera kill -l för att lista alla signalnamn, och använd kommandot man kill för att läsa man-sidan.

Användning av killall

Om du inte vill specificera ett jobb-ID eller PID kan du med killall specificera en process med namn. Det enklaste sättet att avsluta gedit med hjälp av killall är:

 $ killall gedit

Detta kommer att döda alla processer med namnet gedit. Liksom kill är standardsignalen SIGTERM. Den har möjlighet att ignorera kasus med hjälp av -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

För att lära dig mer om olika flaggor som tillhandahålls av killall (t.ex. -u, som gör det möjligt att döda användarägda processer), se man-sidan (man killall)

Användning av xkill

Har du någonsin stött på ett problem där en mediaspelare, t.ex. VLC, grått ut eller hängt? Nu kan du hitta PID och döda programmet med hjälp av ett av de kommandon som anges ovan eller använda xkill.

xkill låter dig döda ett fönster med hjälp av en mus. Exekvera helt enkelt xkill i en terminal, vilket bör ändra muspekaren till ett x eller en liten dödskalleikon. Klicka på x på det fönster du vill stänga. Var dock försiktig med att använda xkill – som dess man-sida förklarar kan det vara farligt. Du har blivit varnad!

Se man-sidan för varje kommando för mer information. Du kan också utforska kommandon som pkill och pgrep.

Lämna ett svar

Din e-postadress kommer inte publiceras.