Tving til at afslutte fejlagtige processer ved hjælp af disse Linux-kommandoer
For at forklare betydningen af en 'proces' med de enkleste ord er, at det er en kørende forekomst af ethvert program eller program på dit system. Du kører muligvis flere applikationer samtidigt, såsom at browse, lytte til musik, der arbejder på din terminal, osv. Der er mange baggrundsprocesser forbundet med disse applikationer, som køres af brugeren.
Hver applikation eller et program, der kører på dit system, skaber flere processer, der er forbundet med din enkelt applikation. Nogle gange kan dette være et problem, og at slippe af med disse processer er den eneste mulighed, du har.
'At dræbe' en proces er en nyttig mulighed, Linux giver dig til at stoppe de igangværende processer, hvad enten det er en forgrundsproces eller en baggrundsproces. I denne artikel vil vi gennemgå kommandoerne som dræbe
, pkill
og Dræb alle
at tvinge til at afslutte enhver proces på et system.
Hvorfor dræbe en proces?
Det er vigtigt at forstå konceptet med at dræbe en proces, før du går videre i denne tutorial. Drab kan virke som en meget brutal måde at udtrykke konceptet på, men hvad det i overført betydning betyder, er at afbryde en proces med magt.
Hvorfor nu afbryde eller afslutte en igangværende proces? Når flere processer kører i baggrunden, kan alle eller få af dem fungere forkert og kan få dit system til at opføre sig forkert. Dette forsinker dine igangværende opgaver, da den fejlfunktionelle proces kan fryse dit system i et stykke tid.
Nogle gange ser det ud til at afbryde alle de dårlige processer at være den eneste mulighed for at genoprette normaliteten på dit system. Linux giver dig mulighed for at dræbe en proces ved hjælp af pid
eller procesnavnet.
Bruger pgrep
kommando
De fleste af Linux-brugerne er bekendt med grep
kommando. Det pgrep
kommandoen kan bruges på lignende linjer i grep
.
pgrep
kommandoen, når den bruges, viser pid
af den kørende proces som angivet i kommandoen. Denne kommando vil vise sig meget nyttig, mens du bruger pkill
kommando.
Generel syntaks:
pgrep [indstillinger] [mønster]
Vigtige muligheder tilgængelige med pgrep
kommando
Mulighed | Beskrivelse |
-u | liste proces-id ejet af en bestemt bruger |
-c | antal matchende processer |
-JEG | angiv kun procesnavne |
-en | liste den fulde sti til procesnavnet |
Lad os demonstrere brugen af pgrep
kommando ved hjælp af et eksempel.
pgrep -u gaurav gnome
Her ønsker vi at se pids
af procesnissen, der ejes af brugeren 'gaurav'. Mulighed -u
giver dig mulighed for at liste pids
af de processer, der ejes af en bestemt bruger. I dette tilfælde bruger gaurav.
Produktion:
gaurav@ubuntu:~$ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav@ubuntu:~$
Mens vi går videre med denne tutorial, pgrep
kommando vil hjælpe os med at bekræfte, om processen er blevet dræbt eller stadig kører.
Lad os nu gå til pkill
kommando og dens udførelse.
Ved brug af pkill
kommando
Du kan bruge pkill
kommando i Linux for at dræbe processen ved hjælp af procesnavnet. Også selvom du ikke kender pid
af en eller anden proces, selv da kan du dræbe den pågældende proces ved hjælp af pkill
kommando.
Processerne kan specificeres med deres fulde navn eller det delvise navn, mens du bruger pkill
kommando. Selvom du indtaster det delvise navn på processen, pkill
kommando vil matche alle de kørende processer med det matchende navn, som du har indtastet i kommandoen.
Syntaks:
pkill [indstillinger][process_name_pattern]
Eksempel:
Lad os vise de processer, der kører i øjeblikket ved hjælp af top
kommando. Du kan også bruge ps
kommando for at liste processerne.
top
top - 14:24:02 op 3:12, 1 bruger, belastningsgennemsnit: 0,29, 0,48, 0,58 Opgaver: 221 i alt, 1 kører, 172 sovende, 0 stoppede, 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 i alt, 610456 gratis, 2233152 brugt, 1084632 buff/cache KiB 3 704 i alt 8,48 brugt 8,48 8,48 gratis. 1187268 nytte Mem PID BRUGER 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 45.024 S 1.7 2.8 3: 14,85 gnome-shell 1197 rod 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 722480 25048 18272 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 Webindhold 4860 gaurav 20 0 3066800 372920 132544 S 0.7 9.5 0:48.20 Webindhold 16007 gaurav 20 0 41944 3780 3116 0.700 R 1.08.
Ved brug af top
kommando vil vise flere processer på din terminal. Lad os prøve at vise processen med et bestemt navn. Vi vil bruge grep
kommando for at vise en proces, hvis navn matcher strengen 'mongo'.
top | grep -i mongo
Bemærk: Her har jeg brugt muligheden -i til at gøre søgningen ufølsom mellem store og små bogstaver.
Outputtet af denne kommando vil vise de processer, der matcher navnet 'mongo'
1158 MongoDB 20 0 288564 4848 1320 S 0.7 0.1 1: 03.22 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1,0 0,1 1: 03,25 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0.7 0.1 1: 03,27 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03,29 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0.7 0.1 1: 03,31 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0.7 0.1 1: 03,33 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1,0 0,1 1: 03,36 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0.7 0.1 1: 03,38 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0.7 0.1 1: 03.40 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1,0 0,1 1: 03,43 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03.45 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1,0 0,1 1: 03,48 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,3 0,1 1: 03,49 mongod 1158 MongoDB 20 0 288564 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
Nu vil vi bruge pkill
kommando til at dræbe processen kaldet 'mongo'.
pkill mongo
Denne kommando vil nu dræbe processen mongo. Vi kan bekræfte, om processen er blevet tvunget til at afslutte ved at bruge pgrep
kommando, der viser pid
af den kørende proces i henhold til de kriterier, der er angivet af brugeren.
gaurav@ubuntu:~$ pgrep mongo gaurav@ubuntu:~$
Denne kommando returnerer ingen værdi. Dette bekræfter, at processen 'mongo' nu er dræbt ved hjælp af pkill
kommando.
Indstillinger, der ofte bruges med pkill
kommando
Mens du bruger pkill
kommando vil vi få brug for de nævnte muligheder for korrekt og ubesværet brug af pkill
kommando.
Muligheder | Beskrivelse |
-f | match mod fulde argumenter inklusive mellemrum, anførselstegn, specialtegn |
-u | at informere pkill-processen, så den matcher den proces, der køres af den angivne bruger |
-1 | genindlæser processen |
-9 | dræber processen |
-15 | yndefuldt afbryder en proces |
Lad os se endnu et eksempel på pkill
kommando ved hjælp af -f
mulighed.
Der er i øjeblikket to kommandoer, der udføres på terminalen som vist nedenfor.
ping bbc.com ping youtube.com
Begge processer er initieret af ping
kommando. Antag nu, at vi kun ønsker at afslutte én proces "ping youtube.com", så skal vi bruge -f
mulighed med pkill
kommando, som dræber en proces med et specifikt navn, inklusive mellemrum og citater fra procesnavnet.
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) bytes data. 64 bytes fra bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 time=30,9 ms 64 bytes fra bom12s08-in-f14.1e100.25 (1427.25) =117 tid=121 ms 64 bytes fra bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=206 ttl=117 time=86.5 ms 64 bytes fra bom12s08-i-16.02.net (16.02.net ): icmp_seq=207 ttl=117 time=105 ms Afsluttet gaurav@ubuntu:~$
Her er "ping youtube.com
”-processen er nu dræbt, og ”ping bbc.com
” kører stadig på terminalen.
I tilfælde af, at hvis vi havde brugt pkill ping
kommando, ville det have dræbt begge ping
processer, hvilket er uønsket.
Signaler brugt med pkill
kommando
pkill
tvinger en proces til at stoppe ved at sende et specifikt signal til den proces. Der er tre mulige signaler, som pkill
kommando kunne sende til processen afhængigt af den kommando, som brugeren giver.
Følgende er listen over tilgængelige signaler.
Signal | Specifikation |
1 (HUP ) | genindlæser den angivne proces |
9 (DRÆBE ) | dræber den specificerede proces |
15 (SEMESTER ) | stopper eller afbryder forsigtigt den angivne proces |
Til denne tutorial vil vi i høj grad stole på DRÆBE
signal. Lad os gennemgå nogle eksempler for at forstå det bedre.
Bruger pgrep
kommando for at få pid
matcher med navnet apache.
gaurav@ubuntu:~$ pgrep apache 1218 10402 10403 gaurav@ubuntu:~$
pkill -DRÆB apache
ELLER du kan også bruge kommandoen med tal (f.eks. 1, 9, 15)
pkill -9 apache
Begge kommandoer vist ovenfor vil dræbe processen apache. Bekræftelse med pgrep
kommando igen.
gaurav@ubuntu:~$ pgrep apache gaurav@ubuntu:~$
Som pgrep
kommandoen returnerer intet output, beviser at processen apache er blevet dræbt.
Konklusion
I denne tutorial lærte vi om pkill
kommandoen og hvordan den bruges til at dræbe processen ved at bruge procesnavnet direkte. Vi lærte også om pgrep
kommando, som bruges til at hente proces-id'et for processen, der køres af en specifik bruger. Det pgrep
kommando giver os mulighed for at krydstjekke, om processen er dræbt.