i et operativsystem er der mange programmer, som enten kan køres af en bruger eller af selve operativsystemet (såsom systemtjenester). Sådanne programmer, der kører på systemet kaldes”processer”. Normalt afsluttes en proces alene, når de er færdige med deres opgave, eller når du beder dem om at afslutte ved at trykke på en tastaturgenvej eller klikke på knappen “Luk”.
men nogle gange kan en proces hænge op eller forbruge en masse CPU eller RAM. I denne situation vil du manuelt “dræbe” processen. I denne artikel vil vi se på forskellige værktøjer, du kan bruge til at dræbe processer på et system.
lokalisering af processen til at dræbe
for at dræbe en proces skal du først finde detaljerne i processen. Du kan gøre dette gennem tre kommandoer – top
ps
pidof
og pgrep
. Afhængigt af situationen kan du bruge en af disse kommandoer til dette formål.
som vi vil se senere i denne artikel, kan du dræbe en proces med dens navn eller dens proces-ID (PID). PID er et tal, der entydigt identificerer en proces. Drab ved proces-ID er nyttigt, når du kun vil dræbe en bestemt proces. På den anden side er drab ved procesnavnet nyttigt, når du vil dræbe alle kørende forekomster af et bestemt program.
lokalisering af processen med den øverste kommando
vi vil først se på kommandoentop
. Affyr den øverste kommando ved at skrive:
top
Du får en interaktiv grænseflade, som vist nedenfor. Du kan gennemse denne liste for at finde navnet eller PID for den proces, du vil dræbe.
for at gennemse denne liste kan du bruge op / ned-tasterne. Derudover har den øverste kommando også måder at filtrere processer efter CPU-brug, bruger-og procesnavne, som du kan læse om i denne vejledning.
kolonnen længst til venstre indeholder PID for processen, og højre side indeholder programnavnet. Som et eksempel har vi i ovenstående skærmbillede vnstatd
– processen, der kører med et Proces-ID på 263.
lokalisering af processen med ps-og grep-kommandoer
en anden måde at få en liste over processen er ved at køre:
ps aux
i ovenstående kommando har vi brugt flagene aux
som har følgende betydninger:
-
a
: Vis processer for alle brugere -
u
: vis den bruger, der bruger processen -
x
: Vis alle processer. (Uden dette viserps
ikke processer, der kører i et GUI-miljø.)
udgangen af kommandoen svarer til den fortop
. PID ‘ et er tilgængeligt i anden kolonne fra venstre, og procesnavnet er tilgængeligt i kolonnen længst til højre.
fordelen ved at brugeps
er, at du nemt kan filtrere denne liste med kommandoengrep
. For eksempel at finde en proces, der er knyttet til udtrykket “vnstat”, kan du bruge:
ps aux | grep -i vnstat
Her fik vi to resultater — vnstatd
processen samtgrep
processen. Da vi søgte efter alle forekomster af udtrykket “vnstat”, og vi også kørte grep
med “vnstat” som argument, fik vi grep
også i resultaterne.
således, selv når der ikke er nogen “vnstat” – relaterede processer, der kører, ville vi få en post, der visergrep
proces:
så selvom vi fik et resultat, er der ingen processer, der er af interesse for os.
find PID med pidof og pgrep
top
og ps
grep
kombination giver os mulighed for at søge efter processer. På den anden side, hvis du kender det nøjagtige navn på en proces, kan du bruge pidof
for at finde dens PID.
brug afpidof
er ret ligetil. For at få PID ‘ erne til en proces med det nøjagtige navn “nginks” skal du bruge:
pidof nginx
Hvis der er processer med det nøjagtige navn “nginks”, får du en liste over PID ‘ er, som vist nedenfor. Hvis der ikke er nogen, får du intet som output.
Hvis du ikke kender det fulde navn, kan du brugepgrep
i stedet forpidof
. For eksempel at søge efter alle processer, der indeholder “ngin” et eller andet sted i deres navn, skal du køre:
pgrep ngin
dette vil matche processer med det nøjagtige navn “nginks” samt enhver anden proces, der matcher de samme kriterier. For vores system skal du bemærke, at vi får alle de PID ‘ er, der tilhørte “nginks” i ovenstående skærmbillede.
pidof
ogpkill
kommandoer giver dig langt mindre information. Som vi skal se i næste afsnit, er der nogle omstændigheder, hvor du ikke kan dræbe en proces. Udgangen af top
og ps
indeholder yderligere oplysninger, der hjælper dig med at afgøre, om du virkelig kan dræbe en proces.
hvilke processer kan du dræbe?
nu hvor vi har fundet processen, er det tid til at dræbe den. Men før vi lærer at gøre det, er der et par ting, du skal vide.
Hvis du er en normal bruger, kan du dræbe dine egne processer, men ikke dem, der tilhører andre brugere. Både top
og ps
viser brugeren, under hvilken en proces kører. I tilfælde af top
indeholder den anden kolonne brugernavnet. Med ps aux
indeholder den første kolonne brugernavnet.
en rodbruger kan dog dræbe alle processer. Du kan enten tilføje sudo
før en kommando for at køre den som root, eller få en rodskal ved at skrive su
, og derefter udføre kommandoen.når en proces dræbes, leveres et” afslutningssignal ” til processen. Selvom der er mange forskellige typer signaler, beskæftiger vi os mest med “SIGTERM” og “SIGKILL” signalerne. De har en numerisk værdi på henholdsvis 15 og 9. Som standard bruger alle processdrabskommandoer “SIGTERM”, som gør det muligt for programmet at køre en kode, før den går ud, hvilket gør det muligt at afslutte”yndefuldt”. Hvis du vil afslutte processen med magt, kan du bruge “SIGKILL” i stedet.
Linuk-kernen opretholder nogle oplysninger relateret til tilstanden af en proces. Når en proces afsluttes, skal kernen holde oplysningerne rundt, så forældreprocessen kan finde ud af, om børneprocessen var i stand til at udføre sine opgaver, og om den afsluttede alene, eller den blev dræbt. Indtil forælderen har gjort det, vises disse” Sofie ” – processer på listen over processer. Du kan ikke dræbe en sådan proces, fordi det bare er en post på listen over alle processer, og den har ikke en egentlig proces forbundet med den.
når en proces udfører input/output-operationer (såsom læsning fra eller skrivning til diske), siges det at være i en tilstand af “uafbrydelig søvn”. Du kan ikke dræbe en proces, mens den er i denne tilstand.
Du kan se, om en proces er i tilstanden “uafbrydelig søvn”(D) ved at se på den 8.kolonne itop
ps
output.
Killing a process
Der er forskellige kommandoer, du kan bruge til at dræbe en proces — kill
killall
pkill
ogtop
. Vi begynder fra den enkleste: kommandoen killall
.
Dræbningsprocesser med killall-kommandoen
killall
kommando er en af de nemmeste måder at dræbe en proces på. Hvis du kender det nøjagtige navn på en proces, og du ved, at den ikke kører som en anden bruger, og den ikke er i å-eller D-tilstande, kan du bruge denne kommando direkte; der er ingen grund til manuelt at finde processen, som vi beskrev ovenfor.
som standard, for eksempel for at dræbe en proces med navnet “firefoks”, Kør:
killall firefox
for at tvinge processen med SIGKILL, Kør:
killall -9 firefox
Du kan også bruge-SIGKILL
i stedet for-9
.
Hvis du vil dræbe processer interaktivt, kan du bruge -i
som sådan:
killall -i firefox
Hvis du vil dræbe en proces, der kører som en anden bruger, kan du bruge sudo
:
sudo killall firefox
Du kan også dræbe en proces, der har kørt i en bestemt periode med -o
og -y
flag. Så hvis du vil dræbe en proces, der har kørt i mere end 30 minutter, skal du bruge:
killall -o 30m <process-name>
Hvis du vil dræbe en proces, der har kørt i mindre end 30 minutter, skal du bruge:
killall -y 30m <process-name>
tilsvarende skal du bruge følgende forkortelser for de respektive tidsenheder:
s | seconds |
m | minutes |
h | hours |
d | days |
w | weeks |
M | months |
y | years |
Killing processes with the pkill command
Sometimes, you only know part of a program’s name. Ligesom pgrep
pkill
giver dig mulighed for at dræbe processer baseret på delvise kampe. For eksempel, hvis du vil dræbe alle processer, der indeholder navnet apache
i navnet, Kør:
pkill apache
Hvis du vil bruge en SIGKILL i stedet for en SIGTERM, skal du bruge:
pkill -9 apache
igen kan du også bruge -SIGKILL
i stedet for -9
.
Dræbningsprocesser med kommandoen kill
brug af kommandoen kill er ligetil. Når du har fundet ud af PID for den proces, du vil dræbe, kan du afslutte den ved hjælp af kommandoen kill
. Vil dræbe en proces med en PID på 1234, skal du bruge følgende kommando:
kill 1234
som vi nævnte tidligere, er standard at bruge en SIGTERM. For at bruge en SIGKILL skal du bruge -9
eller -SIGKILL
som vi har set før:
kill -9 1234
Dræbningsprocesser med den øverste kommando
det er meget let at dræbe processer ved hjælp af top
kommando. Først skal du søge efter den proces, du vil dræbe, og notere PID. Tryk derefter på k
mens top kører (dette er store og små bogstaver). Det vil bede dig om at indtaste PID for den proces, du vil dræbe.
Når du har indtastet PID, skal du trykke på enter. Nu vil det spørge, hvilket signal du vil bruge til at dræbe processen. Hvis du vil bruge SIGTERM (15), skal du blot trykke på enter, da det er standardsignalet. Hvis du vil bruge SIGKILL(9), skal du skrive 9 og trykke på enter.
Hvis du lader proces-ID ‘ ET være tomt og trykker på enter direkte, afslutter det den øverste proces på listen. Du kan rulle ved hjælp af piletasterne og ændre den proces, du vil dræbe på denne måde.
konklusion
i dette indlæg så vi de forskellige måder at dræbe processer på. At lære disse kommandoer er afgørende for korrekt systemadministration og ledelse. Hvis du ønsker at udforske flere af disse kommandoer, har et kig på deres respektive mand sider.
Hvis du kunne lide dette indlæg, skal du dele det.