Vynútiť ukončenie nesprávne sa správajúcich procesov pomocou týchto príkazov systému Linux
Ak chcete vysvetliť význam „procesu“ najjednoduchšími slovami, je to spustená inštancia akejkoľvek aplikácie alebo programu vo vašom systéme. Môžete mať spustených viacero aplikácií súčasne, ako je prehliadanie, počúvanie hudby na vašom termináli atď. S týmito aplikáciami je spojených mnoho procesov na pozadí, ktoré spúšťa používateľ.
Každá aplikácia alebo program, ktorý beží na vašom systéme, vytvára viacero procesov spojených s vašou jedinou aplikáciou. Niekedy to môže byť problém a zbaviť sa týchto procesov je jediná možnosť, ktorú máte.
„Zabitie“ procesu je jednou z užitočných možností, ktoré vám Linux poskytuje na zastavenie prebiehajúcich procesov, či už ide o proces v popredí alebo proces na pozadí. V tomto článku preskúmame príkazy ako zabiť
, pkill
a zabiť všetkých
vynútiť ukončenie akéhokoľvek procesu v systéme.
Prečo zabíjať proces?
Pochopenie konceptu zabíjania procesu je dôležité predtým, ako sa pustíte do tohto tutoriálu. Zabíjanie sa môže zdať veľmi brutálnym spôsobom vyjadrenia konceptu, ale čo to obrazne znamená, je násilné prerušenie procesu.
Teraz, prečo prerušiť alebo ukončiť prebiehajúci proces? Keď na pozadí beží viacero procesov, všetky alebo len málo z nich môže zlyhať a môže spôsobiť nesprávne fungovanie systému. To oneskorí vaše prebiehajúce úlohy, pretože nefunkčný proces môže na chvíľu zamrznúť váš systém.
Niekedy sa zdá, že ukončenie všetkých nesprávnych procesov je jedinou možnosťou na obnovenie normálneho stavu vášho systému. Linux vám umožňuje zabiť proces pomocou pid
alebo názov procesu.
Pomocou pgrep
príkaz
Väčšina používateľov Linuxu pozná grep
príkaz. The pgrep
príkaz možno použiť na podobných riadkoch grep
.
pgrep
pri použití príkazu zobrazí pid
bežiaceho procesu, ako je uvedené v príkaze. Tento príkaz sa ukáže ako veľmi užitočný pri používaní pkill
príkaz.
Všeobecná syntax:
pgrep [možnosti] [vzor]
Dôležité možnosti dostupné s pgrep
príkaz
Možnosť | Popis |
-u | zoznam ID procesu, ktorý vlastní konkrétny používateľ |
-c | počítať počet zodpovedajúcich procesov |
-Ja | uveďte iba názvy procesov |
-a | uveďte celú cestu názvu procesu |
Ukážme si použitie pgrep
príkaz pomocou príkladu.
pgrep -u gaurav trpaslík
Tu by sme chceli vidieť pids
procesného trpaslíka, ktorý vlastní používateľ „gaurav“. Možnosť -u
umožňuje vypísať zoznam pids
procesov vlastnených konkrétnym používateľom. V tomto prípade používateľ gaurav.
Výkon:
gaurav@ubuntu:~$ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav@ubuntu:~$
Ako pokračujeme v tomto návode, pgrep
príkaz nám pomôže potvrdiť, či bol proces zabitý alebo stále beží.
Prejdime teraz k pkill
príkaz a jeho vykonanie.
Použitím pkill
príkaz
Môžete použiť pkill
príkaz v systéme Linux na zabitie procesu pomocou názvu procesu. Aj keď neviete, pid
niektorého procesu, dokonca aj potom môžete tento konkrétny proces zabiť pomocou pkill
príkaz.
Procesy môžu byť špecifikované s ich úplným názvom alebo čiastočným názvom pri použití pkill
príkaz. Aj keď zadáte čiastočný názov procesu, pkill
príkaz porovná všetky spustené procesy so zodpovedajúcim názvom, ktorý ste zadali v príkaze.
Syntax:
pkill [options][process_name_pattern]
Príklad:
Ukážme si aktuálne spustené procesy pomocou top
príkaz. Môžete tiež použiť ps
príkaz na zoznam procesov.
top
hore - 14:24:02 hore 3:12, 1 používateľ, priemerná záťaž: 0,29, 0,48, 0,58 Úlohy: 221 celkom, 1 bežiaca, 172 spiaca, 0 zastavená, 1 zombie %Cpu(y): 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 celkom, 610456 voľných, 2233152 použitých, 1084632 voľných, 484632 buff/cache celkom 378 KiB 837 Swap: 1187268 dostup Mem PID USER 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 koreň 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 webový obsah 4146 Gaurav 20 0 3017924 245304 120604 S 0,7 6,2 2: 01.21 webový obsah 4417 Gaurav 20 0 2964208 234396 119160 S 0.7 6.0 0 :59,90 Web Content 4860 gaurav 20 0 3066800 372920 132544 S 0,7 9,5 0:48,20 Web Content 16007 gaurav 20 0 41944 3780 2871 top 0,00
Použitím top
príkaz zobrazí viacero procesov na vašom termináli. Skúsme zobraziť proces s konkrétnym názvom. Budeme používať grep
príkaz na zobrazenie procesu, ktorého názov sa zhoduje s reťazcom „mongo“.
hore | grep -i mongo
Poznámka: Tu som použil možnosť -i, aby vyhľadávanie nerozlišovalo veľké a malé písmená.
Výstup tohto príkazu zobrazí procesy zodpovedajúce názvu „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
Teraz použijeme pkill
príkaz na zabitie procesu s názvom „mongo“.
pkill mongo
Tento príkaz teraz zabije proces mongo. Môžeme potvrdiť, či bol proces nútený ukončiť pomocou pgrep
príkaz, ktorý zobrazí pid
prebiehajúceho procesu podľa kritérií zadaných používateľom.
gaurav@ubuntu:~$ pgrep mongo gaurav@ubuntu:~$
Tento príkaz nevráti žiadnu hodnotu. To potvrdzuje, že proces „mongo“ je teraz zabitý pomocou pkill
príkaz.
Možnosti často používané s pkill
príkaz
Počas používania pkill
Na správne a bezproblémové používanie príkazu budeme potrebovať uvedené možnosti pkill
príkaz.
možnosti | Popis |
-f | porovnávať s úplnými argumentmi vrátane medzier, úvodzoviek a špeciálnych znakov |
-u | informovať proces pkill, aby sa zhodoval s procesom, ktorý spúšťa zadaný používateľ |
-1 | znovu načíta proces |
-9 | zabíja proces |
-15 | elegantne preruší proces |
Pozrime sa ešte na jeden príklad pkill
príkaz pomocou -f
možnosť.
Na termináli sa momentálne vykonávajú dva príkazy, ako je znázornené nižšie.
ping bbc.com ping youtube.com
Oba procesy sú iniciované ping
príkaz. Teraz predpokladajme, že chceme ukončiť iba jeden proces „ping youtube.com“, potom musíme použiť -f
možnosť s pkill
príkaz, ktorý zabije proces so špecifickým názvom vrátane medzier a úvodzoviek z názvu procesu.
Príkaz:
gaurav@ubuntu:~$ pkill -f "ping youtube.com" gaurav@ubuntu:~$
výsledok:
gaurav@ubuntu:~$ ping youtube.com PING youtube.com (142.250.67.206) 56(84) bajtov dát. 64 bajtov z bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 čas=30,9 ms 64 bajtov z bom12s08-in-f14.1e100.20.net (142.2506.q)= =117 čas=121 ms 64 bajtov z bom12s08-in-f14.1e100.net (142 250.67.206): icmp_seq=206 ttl=117 čas=86,5 ms 64 bajtov z bom12s1708-in-0.6 ): icmp_seq=207 ttl=117 čas=105 ms Ukončené gaurav@ubuntu:~$
Tu je „ping na youtube.com
“proces je teraz zabitý a “ping bbc.com
” stále beží na termináli.
V prípade, ak by sme použili pkill ping
velenie, zabilo by to oboch ping
procesov, čo je nežiaduce.
Signály používané s pkill
príkaz
pkill
prinúti proces ukončiť odoslaním špecifického signálu tomuto procesu. Existujú tri možné signály, ktoré pkill
príkaz môže poslať procesu v závislosti od príkazu, ktorý používateľ zadá.
Nasleduje zoznam dostupných signálov.
Signál | Špecifikácia |
1 (HUP ) | znovu načíta zadaný proces |
9 (ZABIŤ ) | zabije zadaný proces |
15 (TERMÍN ) | jemne zastaví alebo preruší špecifikovaný proces |
V tomto návode sa budeme vo veľkej miere spoliehať na ZABIŤ
signál. Poďme si prejsť niekoľko príkladov, aby sme to lepšie pochopili.
Pomocou pgrep
príkaz na získanie pid
zodpovedajúce názvu apache.
gaurav@ubuntu:~$ pgrep apache 1218 10402 10403 gaurav@ubuntu:~$
pkill -KIll apache
ALEBO môžete použiť aj príkaz s číslami (napr. 1, 9, 15)
pkill -9 apache
Oba vyššie uvedené príkazy zabijú proces apache. Potvrdenie pomocou pgrep
znova príkaz.
gaurav@ubuntu:~$ pgrep apache gaurav@ubuntu:~$
Ako pgrep
príkaz nevracia žiadny výstup, dokazuje, že proces apache bol zabitý.
Záver
V tomto návode sme sa dozvedeli o pkill
príkaz a ako sa používa na zabitie procesu priamo pomocou názvu procesu. Dozvedeli sme sa aj o pgrep
príkaz, ktorý sa používa na získanie ID procesu procesu spusteného ktorýmkoľvek konkrétnym používateľom. The pgrep
príkaz nám umožňuje krížovú kontrolu, či je proces zabitý.