Как да убиете процес по име в Linux

Принудително прекратете неправилно работещи процеси, като използвате тези команди на Linux

Обясняването на значението на „Процес“ с най-простите думи е, че това е работещ екземпляр на всяко приложение или програма във вашата система. Може да изпълнявате няколко приложения едновременно, като например сърфиране, слушане на музика, работеща на вашия терминал и т.н. Има много фонови процеси, свързани с тези приложения, които се изпълняват от потребителя.

Всяко приложение или програма, която работи във вашата система, създава множество процеси, свързани с вашето едно приложение. Понякога това може да е проблем и да се отървете от тези процеси е единствената възможност, която имате.

„Убиването“ на процес е една полезна опция, която Linux ви предоставя да спрете текущите процеси, било то процес на преден план или фонов процес. В тази статия ще прегледаме командите като убиват, pkill и killall за принудително прекратяване на всеки процес в системата.

Защо да убиеш процес?

Разбирането на концепцията за убиване на процес е важно, преди да продължите напред в този урок. Убийството може да изглежда много брутален начин за изразяване на концепцията, но това, което образно означава, е насилствено прекратяване на процес.

Сега, защо прекратявате или прекратявате текущ процес? Когато множество процеси се изпълняват на заден план, всички или няколко от тях може да не работят и да доведат до неправилно поведение на системата ви. Това забавя текущите ви задачи, тъй като неизправният процес може да замрази системата ви за известно време.

Понякога излизането от всички неправилно функциониращи процеси изглежда е единствената възможност за възстановяване на нормалността на вашата система. Linux ви позволява да убиете процес с помощта на pid или името на процеса.

Използвайки pgrep команда

Повечето потребители на Linux са запознати с grep команда. В pgrep командата може да се използва на подобни редове на grep.

pgrep команда, когато се използва, показва pid на изпълнявания процес, както е посочено в командата. Тази команда ще се окаже много полезна, докато използвате pkill команда.

Общ синтаксис:

pgrep [опции] [шаблон]

Важни опции, налични с pgrep команда

ОпцияОписание
-uсписък с идентификатор на процеса, притежаван от конкретен потребител
-° Спребройте броя на съвпадащите процеси
-азизбройте само имена на процеси
списък с пълния път на името на процеса

Нека демонстрираме използването на pgrep команда с помощта на пример.

pgrep -u gaurav gnome

Тук искаме да видим pids на процеса gnome, който е собственост на потребителя „gaurav“. Опция -u ви позволява да изброите pids на процесите, притежавани от конкретен потребител. В този случай потребителят gaurav.

Изход:

gaurav@ubuntu:~$ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav@ubuntu:~$

Докато продължаваме напред с този урок, pgrep командата ще ни помогне да потвърдим дали процесът е убит или все още работи.

Нека сега да преминем към pkill команда и нейното изпълнение.

Използвайки pkill команда

Можете да използвате pkill команда в Linux, за да убиете процеса, използвайки името на процеса. Дори и да не познавате pid на някакъв процес, дори тогава можете да убиете този конкретен процес с помощта на pkill команда.

Процесите могат да бъдат посочени с пълното или частично име, докато се използва pkill команда. Дори ако въведете частичното име на процеса, pkill командата ще съпостави всички работещи процеси със съответстващото име, което сте въвели в командата.

Синтаксис:

pkill [опции][шаблон_име_на_процеса] 

Пример:

Нека покажем процесите, които се изпълняват в момента с помощта на връх команда. Можете също да използвате п.с команда за изброяване на процесите.

връх
отгоре - 14:24:02 нагоре 3:12, 1 потребител, средно натоварване: 0,29, 0,48, 0,58 Задачи: общо 221, 1 бягане, 172 спящи, 0 спряни, 1 зомби %Cpu(s): 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 общо, 610456 безплатно, 2233152 използвани, 1084632 buff/cache KiB Swap7, 480 общо: 048, използвани общо 048 1187268 полза Mem PID USER PR NI Вирт ВЕИ СБР 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 гном черупка 1197 корен 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 гном-Терминал 3915 Gaurav 20 0 2804900 231524 111228 S 0,7 5,9 0: 54,42 уеб съдържание 4146 Gaurav 20 0 3017924 245304 120604 S 0,7 6,2 2: 01,21 уеб съдържание 4417 Gaurav 20 0 2964208 234396 119160 S 0.7 6.0 0 :59,90 Уеб съдържание 4860 gaurav 20 0 3066800 372920 132544 S 0,7 9,5 0:48,20 Уеб съдържание 16007 gaurav 20 0 41944 3780 3170 R 0.170 отгоре. 

Използвайки връх командата ще покаже множество процеси на вашия терминал. Нека се опитаме да покажем процеса с конкретно име. Ще използваме grep команда за показване на процес, чието име съответства на низа „mongo“.

отгоре | grep -i mongo

Забележка: Тук използвах опцията -i, за да направя търсенето нечувствително към главни букви.

Резултатът от тази команда ще покаже процесите, съответстващи на името "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

Сега ще използваме pkill команда за убиване на процеса, наречен „mongo“.

pkill mongo

Тази команда сега ще убие процеса mongo. Можем да потвърдим дали процесът е бил принуден да прекрати, като използваме pgrep команда, която показва pid на текущия процес според критериите, посочени от потребителя.

gaurav@ubuntu:~$ pgrep mongo gaurav@ubuntu:~$

Тази команда няма да върне стойност. Това потвърждава, че процесът „mongo“ вече е убит с помощта на pkill команда.

Опции, често използвани с pkill команда

Докато използвате pkill команда ще ни трябват споменатите опции за правилно и безпроблемно използване на pkill команда.

НастроикиОписание
-fсъвпадение с пълни аргументи, включително интервали, кавички, специални знаци
-uза да информира процеса pkill да съответства на процеса, изпълняван от посочения потребител
-1презарежда процеса
-9убива процеса
-15грациозно прекъсва процес

Нека видим още един пример за pkill команда с помощта на -f опция.

Има две команди, които в момента се изпълняват на терминала, както е показано по-долу.

ping bbc.com ping youtube.com

И двата процеса се инициират от пинг команда. Сега, да предположим, че искаме да прекратим само един процес „ping youtube.com“, тогава трябва да използваме -f опция с pkill команда, която убива процес с конкретно име, включително интервалите и кавичките от името на процеса.

Команда:

gaurav@ubuntu:~$ pkill -f "ping youtube.com" gaurav@ubuntu:~$ 

Резултат:

gaurav@ubuntu:~$ ping youtube.com PING youtube.com (142.250.67.206) 56(84) байта данни. 64 байта от bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 time=30.9 ms 64 байта от bom12s08-in-f14.1e100.net (142.250.67.206): .q. =117 време=121 мс 64 байта от bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=206 ttl=117 време=86,5 мс 64 байта от bom12s08-in-f16.net (142.250.67.206): ): icmp_seq=207 ttl=117 време=105 мс Прекратено gaurav@ubuntu:~$ 

Тук „пинг youtube.com“ процесът вече е убит и “ping bbc.com” все още работи на терминала.

В случай, че бяхме използвали pkill пинг команда, това би убило и двамата пинг процеси, което е нежелателно.

Сигнали, използвани с pkill команда

pkill принуждава процес да се откаже чрез изпращане на специфичен сигнал към този процес. Има три възможни сигнала, които pkill командата може да изпрати на процеса в зависимост от командата, която потребителят дава.

Следва списък на наличните сигнали.

СигналСпецификация
1(HUP)презарежда посочения процес
9 (УБИЙ)убива посочения процес
15 (СРОК)внимателно спира или прекратява посочения процес

За този урок ще разчитаме в голяма степен на УБИЙ сигнал. Нека да преминем през няколко примера, за да го разберем по-добре.

Използвайки pgrep команда, за да получите pid съвпадение с името apache.

gaurav@ubuntu:~$ pgrep apache 1218 10402 10403 gaurav@ubuntu:~$
pkill -УБИЙ Апач

ИЛИ можете също да използвате командата с числа (напр. 1, 9, 15)

pkill -9 apache

И двете команди, показани по-горе, ще убият процеса apache. Потвърждаване с pgrep команда отново.

gaurav@ubuntu:~$ pgrep apache gaurav@ubuntu:~$

Тъй като pgrep командата не връща изход, доказва, че процесът apache е убит.

Заключение

В този урок научихме за pkill команда и как се използва за убиване на процеса, като се използва директно името на процеса. Научихме и за pgrep команда, която се използва за извличане на идентификатора на процеса на стартиран от всеки конкретен потребител. В pgrep командата ни позволява да проверим дали процесът е убит.

Категория: Linux