Sådan dræber du en proces eller stopper et program i Linux

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.