Tvinge avslutning av feilaktige prosesser ved å bruke disse Linux-kommandoene
For å forklare betydningen av en "prosess" i de enkleste ordene er at det er en kjørende forekomst av et hvilket som helst program eller program på systemet ditt. Det kan hende du kjører flere applikasjoner samtidig, for eksempel surfing, lytter til musikk som jobber på terminalen din osv. Det er mange bakgrunnsprosesser knyttet til disse applikasjonene som kjøres av brukeren.
Hver applikasjon eller et program som kjører på systemet ditt oppretter flere prosesser knyttet til din enkelt applikasjon. Noen ganger kan dette være et problem, og å bli kvitt disse prosessene er det eneste alternativet du har.
Å "drepe" en prosess er et nyttig alternativ Linux gir deg for å stoppe de pågående prosessene, enten det er en forgrunnsprosess eller en bakgrunnsprosess. I denne artikkelen vil vi gjennomgå kommandoene som drepe
, pkill
og Drep alle
å tvinge avslutning av enhver prosess på et system.
Hvorfor drepe en prosess?
Det er viktig å forstå konseptet med å drepe en prosess før du går videre i denne opplæringen. Drap kan virke som en veldig brutal måte å uttrykke konseptet på, men hva det billedlig betyr er å avbryte en prosess med makt.
Hvorfor avbryte eller avslutte en pågående prosess? Når flere prosesser kjører i bakgrunnen, kan alle eller få av dem fungere feil og kan føre til at systemet ikke oppfører seg. Dette forsinker de pågående oppgavene dine ettersom feilfunksjonsprosessen kan fryse systemet en stund.
Noen ganger ser det ut til å avslutte alle prosessene som ikke oppfører seg å være det eneste alternativet for å gjenopprette normaliteten på systemet ditt. Linux lar deg drepe en prosess ved å bruke pid
eller prosessnavnet.
Bruker pgrep
kommando
De fleste av Linux-brukerne er kjent med grep
kommando. De pgrep
kommandoen kan brukes på lignende linjer i grep
.
pgrep
kommandoen når den brukes, viser pid
av den kjørende prosessen som spesifisert i kommandoen. Denne kommandoen vil vise seg å være svært nyttig når du bruker pkill
kommando.
Generell syntaks:
pgrep [alternativer] [mønster]
Viktige alternativer tilgjengelig med pgrep
kommando
Alternativ | Beskrivelse |
-u | listeprosess-ID som eies av en bestemt bruker |
-c | telle antall matchende prosesser |
-JEG | liste bare prosessnavn |
-en | liste hele banen til prosessnavnet |
La oss demonstrere bruken av pgrep
kommando ved hjelp av et eksempel.
pgrep -u gaurav gnome
Her ønsker vi å se pids
av prosessnissen som eies av brukeren ‘gaurav’. Alternativ -u
lar deg liste opp pids
av prosessene som eies av en bestemt bruker. I dette tilfellet bruker gaurav.
Produksjon:
gaurav@ubuntu:~$ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav@ubuntu:~$
Når vi går videre med denne opplæringen, pgrep
kommandoen vil hjelpe oss med å bekrefte om prosessen har blitt drept eller fortsatt kjører.
La oss nå gå til pkill
kommandoen og dens utførelse.
Ved hjelp av pkill
kommando
Du kan bruke pkill
kommando i Linux for å drepe prosessen ved å bruke prosessnavnet. Selv om du ikke kjenner pid
av en eller annen prosess, selv da kan du drepe den spesielle prosessen ved å bruke pkill
kommando.
Prosessene kan spesifiseres med deres fullstendige navn eller delnavn mens du bruker pkill
kommando. Selv om du skriver inn det delvise navnet på prosessen, vil den pkill
kommandoen vil matche alle de kjørende prosessene med det samsvarende navnet du har skrevet inn i kommandoen.
Syntaks:
pkill [alternativer][process_name_pattern]
Eksempel:
La oss vise prosessene som kjører for øyeblikket ved hjelp av topp
kommando. Du kan også bruke ps
kommando for å liste prosessene.
topp
topp - 14:24:02 opp 3:12, 1 bruker, belastningsgjennomsnitt: 0,29, 0,48, 0,58 Oppgaver: 221 totalt, 1 løper, 172 sover, 0 stoppet, 1 zombie %Cpu(er): 5,6 us, 1,0 sy , 0,0 ni, 92,9 id, 0,4 wa, 0,0 hi, 0,1 si, 0,0 st KiB Mem : 3928240 totalt, 610456 gratis, 2233152 brukt, 1084632 buff/cache KiB 7300 totalt: 8,48 brukt 8,483 gratis: 8,48 totalt. 1187268 nytte Mem PID BRUKER PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND 4077 gaurav 20 0 3312128 673480 118360 S 19.6 17.1 15: 13,23 Web Content 3712 gaurav 20 0 3953008 453544 116476 S 4.0 11.5 9: 28,39 MainThread 2010 gaurav 20 0 4084232 111096 45024 S 1,7 2,8 3: 14,85 gnome-shell 1197 rot 20 0 1039612 33704 22988 S 1,0 0,9 3: 04,42 Xorg 1426 CouchDB 20 0 3772396 16908 2520 S 0,7 0,4 1: 50,83 beam.smp 3288 gaurav 20 0 722 480 25 048 18 272 S 0,7 0,6 0: 06,84 gnome-terminal- 3915 gaurav 20 0 2804900 231524 111228 S 0,7 5,9 0: 54.42 Web Content 4146 gaurav 20 0 3017924 245304 120604 S 0,7 6,2 2: 01,21 Web Content 4417 gaurav 20 0 2964208 234396 119160 S 0,7 6,0 0 :59.90 Nettinnhold 4860 gaurav 20 0 3066800 372920 132544 S 0.7 9.5 0:48.20 Nettinnhold 16007 gaurav 20 0 41944 3780 3106 0 R 1.08 topp:
Ved hjelp av topp
kommandoen vil vise flere prosesser på terminalen din. La oss prøve å vise prosessen med et bestemt navn. Vi vil bruke grep
kommando for å vise en prosess hvis navn samsvarer med strengen 'mongo'.
topp | grep -i mongo
Merk: Her har jeg brukt -i-alternativet for å gjøre søket ufølsomt for store og små bokstaver.
Utdataene fra denne kommandoen vil vise prosessene som samsvarer med navnet 'mongo'
1158 mongodb 20 0 288 564 4848 1320 S 0,7 0,1 1: 03,22 mongod 1158 mongodb 20 0 288 564 4848 1320 S 1,0 0,1 1: 03,25 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0,7 0,1 1: 03,27 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0,7 0,1 1: 03,29 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0,7 0,1 1: 03,31 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0,7 0,1 1: 03,33 mongod 1158 mongodb 20 0 288 564 4848 1320 S 1,0 0,1 1: 03,36 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0,7 0,1 1: 03,38 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0,7 0,1 1: 03,40 mongod 1158 mongodb 20 0 288 564 4848 1320 S 1,0 0,1 1: 03,43 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0.7 0.1 1: 03,45 mongod 1158 mongodb 20 0 288 564 4848 1320 S 1,0 0,1 1: 03,48 mongod 1158 mongodb 20 0 288 564 4848 1320 S 0,3 0,1 1: 03,49 mongod 1158 mongodb 20 0 288 564 4848 1320 S 1,0 0,1 1: 03,52 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1:03,54 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1:03,57 mongod
Nå skal vi bruke pkill
kommando for å drepe prosessen kalt 'mongo'.
pkill mongo
Denne kommandoen vil nå drepe prosessen mongo. Vi kan bekrefte om prosessen har blitt tvunget til å avslutte ved å bruke pgrep
kommando som viser pid
av den kjørende prosessen i henhold til kriteriene spesifisert av brukeren.
gaurav@ubuntu:~$ pgrep mongo gaurav@ubuntu:~$
Denne kommandoen vil ikke returnere noen verdi. Dette bekrefter at prosessen "mongo" nå er drept ved hjelp av pkill
kommando.
Alternativer som ofte brukes med pkill
kommando
Mens du bruker pkill
kommandoen vil vi trenge de nevnte alternativene for riktig og uanstrengt bruk av pkill
kommando.
Alternativer | Beskrivelse |
-f | match mot fullstendige argumenter, inkludert mellomrom, anførselstegn, spesialtegn |
-u | å informere pkill-prosessen for å matche prosessen som kjøres av den angitte brukeren |
-1 | laster inn prosessen på nytt |
-9 | dreper prosessen |
-15 | avbryter grasiøst en prosess |
La oss se enda et eksempel på pkill
kommando ved å bruke -f
alternativ.
Det er to kommandoer som utføres på terminalen som vist nedenfor.
ping bbc.com ping youtube.com
Begge prosessene er initiert av ping
kommando. Anta nå at vi ønsker å avslutte bare én prosess "ping youtube.com", så må vi bruke -f
alternativet med pkill
kommando som dreper en prosess med et spesifikt navn inkludert mellomrom og sitater fra prosessnavnet.
Kommando:
gaurav@ubuntu:~$ pkill -f "ping youtube.com" gaurav@ubuntu:~$
Resultat:
gaurav@ubuntu:~$ ping youtube.com PING youtube.com (142.250.67.206) 56(84) byte med data. 64 byte fra bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 time=30,9 ms 64 byte fra bom12s08-in-f14.1e100.2se = 0.27 .2se (1427) =117 tid=121 ms 64 byte fra bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=206 ttl=117 time=86.5 ms 64 byte fra bom12s08-i-16.04.net (16.204.net (16.204.net) ): icmp_seq=207 ttl=117 time=105 ms Avsluttet gaurav@ubuntu:~$
Her, "ping youtube.com
"-prosessen er nå drept og "ping bbc.com
” kjører fortsatt på terminalen.
I tilfelle, hvis vi hadde brukt pkill ping
kommando, ville det ha drept begge ping
prosesser, noe som er uønsket.
Signaler brukt med pkill
kommando
pkill
tvinger en prosess til å avslutte ved å sende et spesifikt signal til den prosessen. Det er tre mulige signaler som pkill
kommando kan sendes til prosessen avhengig av kommandoen som brukeren gir.
Følgende er listen over tilgjengelige signaler.
Signal | Spesifikasjon |
1 (HUP ) | laster den spesifiserte prosessen på nytt |
9 (DREPE ) | dreper den spesifiserte prosessen |
15 (BEGREP ) | stopper eller avbryter den spesifiserte prosessen forsiktig |
For denne opplæringen vil vi stole sterkt på DREPE
signal. La oss gå gjennom noen eksempler for å forstå det bedre.
Bruker pgrep
kommando for å få pid
samsvarer med navnet apache.
gaurav@ubuntu:~$ pgrep apache 1218 10402 10403 gaurav@ubuntu:~$
pkill -DREPP apache
ELLER du kan også bruke kommandoen med tall (f.eks. 1, 9, 15)
pkill -9 apache
Begge kommandoene vist ovenfor vil drepe prosessen apache. Bekrefter med pgrep
kommando igjen.
gaurav@ubuntu:~$ pgrep apache gaurav@ubuntu:~$
Som pgrep
kommandoen returnerer ingen utdata, beviser at prosessen apache har blitt drept.
Konklusjon
I denne opplæringen lærte vi om pkill
kommandoen og hvordan den brukes til å drepe prosessen ved å bruke prosessnavnet direkte. Vi lærte også om pgrep
kommando som brukes til å hente prosess-ID-en til prosessen som kjøres av en spesifikk bruker. De pgrep
kommando lar oss krysssjekke om prosessen er drept.