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
.