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

Убиването на процес понякога е единственият начин да се отървете от него. Въпреки грубото име, „убиването“ на процес означава просто „принуждаването му да се откаже“. Ето как да го направите от командния ред на Linux или macOS.

Какво е процес?

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

Можете да обедините процесите в две групи:

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

Ако процесите на преден план са предната част на персонала на театъра и актьорите, процесите на заден план са задкулисния екип на „зад кулисите“.

Когато процесите се държат неправилно или неизправно, те могат да отнемат твърде много процесорно време, да консумират вашата RAM памет или да влязат в тесен изчислителен цикъл и да не реагират. Графичните приложения могат да откажат да реагират на щраквания с мишката. Терминалните приложения може никога да не ви върнат към командния ред.

Хуманният отговор

„Убиването“ на процес просто означава „принуждаване на процеса да спре“. Това може да е необходимо, ако процесът отказва да отговори.

Linux предоставя командите kill, pkill и killall, за да ви позволи да направите точно това. Тези команди могат да се използват с всеки тип процес, графичен или команден ред, преден план или фон.

  Как да инсталирате Telegram на Linux

Командата за убийство

За да използвате kill, трябва да знаете идентификатора на процеса (PID) на процеса, който искате да прекратите. Командата ps може да се използва за намиране на PID на процес.

За да имате ps търсене във всички процеси, използвайте опцията -e (всички процеси). Препоръчително е прехвърлянето на изхода през по-малко, ще има доста от него. Въведете ps, интервал, -e, интервал, | (символ с вертикална линия), друг интервал и след това напишете по-малко. Натиснете Enter, за да изпълните командата.

ps -e | less

Това ще ви даде списък с процеси, който изглежда подобен на екранната снимка по-долу. Можете да търсите напред в по-малко с помощта на клавиша / и можете да търсите назад с помощта на ? ключ.

За да влезете в процеса, който ви интересува, прехвърлете изхода от ps през grep и посочете името — или част от името — на процеса.

ps -e | grep shutter

След като намерите PID на процеса, който искате да прекратите, го предайте на командата kill като параметър. За да прекратите процеса на затвора, идентифициран от предишната команда, използвайте тази команда:

kill 2099

Командата kill е безшумен убиец – не ви дава обратна връзка, ако е била успешна.

Командата pkill

Командата pkill ви позволява да убиете процес или процеси по име. Не е необходимо да идентифицирате процеса чрез PID. За да използвате pkill, вие предоставяте термин за търсене, който pkill използва, за да провери в списъка с работещи процеси. Процесите на съпоставяне се прекратяват. Така че трябва да сте сигурни, че тази дума за търсене е изписана правилно.

Като защитна мрежа можете да използвате командата pgrep, преди да използвате командата pkill. Командата pgrep също приема дума за търсене. Той ще изброи PID на всеки процес, който съответства на думата за търсене. Това е безопасно, защото pgrep няма да издаде никакъв сигнал за унищожаване на процесите и ако въведете погрешно думата за търсене, няма да убиете друг процес по погрешка. Можете да се уверите, че терминът за търсене е правилно обмислен, преди да го предадете на pkill. И pkill, и pgrep третират термина за търсене по същия начин. Лечението им е толкова сходно, че те споделете една и съща страница на man.

  Как да качите музика в Google Music на Linux

Да предположим, че има процес с “subq” в името си. Ще използваме ps -u dave | grep команда, за да надникнете зад завесата. Можете да видите, че „subq“ ще съответства на този процес и само на този процес. Това беше само за да можете да видите пълното име на процеса.

ps -u dave | grep subq

Да предположим, че нашият потребител не е направил това; всичко, което знаят е, че името на процеса съдържа подниз „subq“. Те използват pgrep, за да проверят дали има само едно съвпадение с думата за търсене. След това те използват този термин за търсене с pkill.

pgrep subq
pkill subq

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

pgrep chrome
pkill chrome
pgrep chrome

Ако се изпълняват няколко процеса с едно и също име, но не искате да ги убиете всички, можете да използвате pgrep с опцията -f (команден ред), за да определите кой процес е кой. Прост пример биха били два процеса на ping. Искате да убиете единия от тях, но не и другия. Можете да използвате техните командни редове, за да ги разграничите. Обърнете внимание на използването на кавички за обвиване на параметъра на командния ред.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

Командата killall

Предупреждение: В операционните системи Solaris и OpenIndiana командата killall ще убие всички процеси, които ви принадлежат. Ако сте root или ако сте издали sudo killall, ще рестартирате компютъра си! По време на проучването за тази статия това поведение беше потвърдено с най-новата версия на OpenIndiana Hipster 2018.10.

  Как да играете The Elder Scrolls: IV Oblivion на Linux

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

Не можете да предоставите частично съвпадение с име на процес; трябва да предоставите цялото име на процеса, както е показано:

killall shutt
killall shutter

Опцията -y (по-млад от) ви позволява да убивате процеси, които са се изпълнявали за по-малко от определен период. Периодът е даден в числа, последвани от една от тези единици:

s (секунди)
m (минути)
ч (часове)
d (дни)
w (седмици)
M (месеци, бележка, главно „M“)
y (години)

За да убиете процес, наречен ana, който току-що е стартиран, и да оставите всички по-стари екземпляри на ana да работят, можете да използвате следните параметри с killall, ако сте реагирали в рамките на две минути:

killall -y 2m ana

Опцията -o (по-стара от) ви позволява да убивате процеси, които са работили по-дълго от определен период. Тази команда ще убие всички ssh връзки, които работят повече от един ден:

killall -o 1d sshd

Не бъдете много щастливи

Тези команди ще ви позволят да идентифицирате и прекратявате грешни процеси с точност и безопасност правилно.

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