Når en proces opfører sig forkert, vil du nogle gange måske ønske at afslutte eller dræbe den. I dette indlæg undersøger vi nogle få måder at afslutte en proces eller et program på fra kommandolinjen såvel som fra en grafisk grænseflade, idet vi bruger gedit som et eksempelprogram.
Anvendelse af kommandolinjen/afslutningstegnene
Ctrl + C
Et problem ved at påkalde gedit
fra kommandolinjen (hvis du ikke bruger gedit &
) er, at det ikke frigør prompten, så shell-sessionen er blokeret. I sådanne tilfælde er Ctrl+C (Control-tasten i kombination med ‘C’) praktisk. Det vil afslutte gedit
, og alt arbejde vil være tabt (medmindre filen blev gemt). Ctrl+C sender signalet SIGINT
til gedit
. Dette er et stop-signal, hvis standardhandling er at afslutte processen. Det instruerer shell’en om at stoppe gedit
og vende tilbage til hovedsløjfen, og du får prompten tilbage.
$ gedit
^C
Ctrl + Z
Dette kaldes et suspenderingstegn. Det sender et SIGTSTP
-signal til process. Dette er også et stop-signal, men standardhandlingen er ikke at dræbe, men at suspendere processen.
Det vil stoppe (dræbe/afbryde) gedit
og returnere shellprompten.
$ gedit
^Z
+ Stopped gedit
$
Når processen er suspenderet (i dette tilfælde gedit
), er det ikke muligt at skrive eller gøre noget i gedit
. I baggrunden bliver processen til et job. Dette kan verificeres med kommandoen jobs
.
$ jobs
+ Stopped gedit
jobs
giver dig mulighed for at styre flere processer i en enkelt shellsession. Du kan stoppe, genoptage og flytte job til baggrunden eller forgrunden efter behov.
Lad os genoptage gedit
i baggrunden og frigøre en prompt til at køre andre kommandoer. Det kan du gøre ved hjælp af kommandoen bg
efterfulgt af job-ID (bemærk fra outputtet af
jobs
ovenfor. er job-ID).
$ bg 1
+ gedit &
Dette svarer til at starte gedit
med &,
:
$ gedit &
Med kill
kill
giver fin kontrol over signaler, idet du kan signalere en proces ved at angive enten et signalnavn eller et signalnummer, efterfulgt af et proces-ID eller PID.
Det jeg godt kan lide ved kill
er, at det også kan arbejde med job-ID’er. Lad os starte gedit
i baggrunden ved hjælp af gedit &
. Hvis vi antager, at jeg har et job-ID på gedit
fra kommandoen jobs
, så lad os sende SIGINT
til gedit
:
$ kill -s SIGINT %1
Bemærk, at job-ID’et skal have et præfiks med %
, ellers vil kill
betragte det som et PID.
kill
kan fungere uden eksplicit angivelse af et signal. I så fald er standardhandlingen at sende SIGTERM
, hvilket vil afslutte processen. Udfør kill -l
for at få en liste over alle signalnavne, og brug kommandoen man kill
til at læse man-siden.
Brug af killall
Hvis du ikke ønsker at angive et job-ID eller PID, kan du med killall
angive en proces ved navn. Den enkleste måde at afslutte gedit
ved hjælp af killall
er:
$ killall gedit
Dette vil dræbe alle processer med navnet gedit
. Ligesom kill
er standardsignalet SIGTERM
. Den har mulighed for at ignorere case ved hjælp af -I
:
$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit
For at få mere at vide om de forskellige flag, der leveres af killall
(såsom -u
, som giver dig mulighed for at dræbe brugerejede processer), skal du tjekke man-siden (man killall
)
Brug af xkill
Har du nogensinde stødt på et problem, hvor en medieafspiller, såsom VLC, blev grå eller hang? Nu kan du finde PID’et og dræbe programmet ved hjælp af en af de ovenfor anførte kommandoer eller bruge xkill
.
xkill
giver dig mulighed for at dræbe et vindue ved hjælp af en mus. Du skal blot udføre xkill
i en terminal, hvilket bør ændre musemarkøren til et x eller et lille kranieikon. Klik på x på det vindue, du ønsker at lukke. Vær dog forsigtig med at bruge xkill
– som dets man-side forklarer, kan det være farligt. Du er blevet advaret!
Referer til man-siden for hver kommando for at få flere oplysninger. Du kan også udforske kommandoer som pkill
og pgrep
.