boolsk verden

kill coverbillede

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 – toppspidof 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.

den øverste kommando, der viser en liste over processer.

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 viser ps 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.

resultaterne af kommandoen "ps."ps aux" command.

fordelen ved at brugepser, 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

filtreringsprocesser med ps og grep, med et positivt resultat.

Her fik vi to resultater — vnstatdprocessen 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:

filtreringsprocesser med ps og grep.

så selvom vi fik et resultat, er der ingen processer, der er af interesse for os.

find PID med pidof og pgrep

top og psgrep 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.

pidof-kommandoen

Hvis du ikke kender det fulde navn, kan du brugepgrepi 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.

kommandoen pgrep.

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 topog 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 topog 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 sudofø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 itopps output.

Killing a process

Der er forskellige kommandoer, du kan bruge til at dræbe en proces — killkillallpkill 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-SIGKILLi 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 pgreppkill 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.