Як знищити процеси з терміналу Linux

Знищення процесу іноді є єдиним способом позбутися від нього. Незважаючи на жорстку назву, «вбивство» процесу означає лише «примусити його завершити». Ось як це зробити з командного рядка Linux або macOS.

Що таке процес?

Запущені програми, такі як ваш веб-браузер, фонові процеси, пов’язані з середовищем вашого робочого столу, і системні служби Linux – це всі процеси.

Ви можете об’єднати процеси в дві групи:

Процеси переднього плану – це процеси, які були запущені або запущені користувачем. Вони можуть бути у вікні терміналу, або вони можуть бути графічною програмою.
Фонові процеси – це всі процеси, які запускаються автоматично і не мають жодної взаємодії з користувачами. Вони не очікують введення від користувачів і не представляють їм результатів чи результатів. Фонові процеси – це такі речі, як служби та демони.

Якщо процесами на передньому плані виступають кадри театру та актори, то фоновими процесами є команда «за лаштунками».

Коли процеси поводяться неправильно або неправильно, вони можуть витрачати занадто багато часу ЦП, споживати вашу оперативну пам’ять або входити в жорсткий обчислювальний цикл і не реагувати. Графічні програми можуть відмовлятися реагувати на клацання миші. Термінальні програми можуть ніколи не повернути вас до командного рядка.

Гуманна відповідь

«Знищити» процес просто означає «примусити процес завершити». Це може знадобитися, якщо процес відмовляється відповідати.

Linux надає команди kill, pkill і killall, щоб ви могли робити саме це. Ці команди можна використовувати з будь-яким типом процесу, графічним або командним рядком, переднім планом або фоном.

  Як встановити JetBrains DataGrip на Linux

Команда вбивства

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

Щоб ps шукав усі процеси, використовуйте параметр -e (усі процеси). Рекомендується направляти вихід через менше, його буде досить багато. Введіть ps, пробіл, -e, пробіл, | (символ вертикальної лінії), інший пробіл, а потім введіть менше. Натисніть Enter, щоб виконати команду.

ps -e | less

Це дасть вам список процесів, схожий на знімок екрана нижче. За допомогою клавіші / можна шукати вперед у меншій частині, а за допомогою клавіші ? ключ.

Щоб повернутися до процесу, який вас цікавить, передайте вихідні дані з ps через grep і вкажіть ім’я — або частину назви — процесу.

ps -e | grep shutter

Після того, як ви знайшли PID процесу, який хочете завершити, передайте його команді kill як параметр. Щоб завершити процес затвора, визначений попередньою командою, скористайтеся цією командою:

kill 2099

Команда вбивства — це тихий вбивця — вона не дає вам жодного зворотного зв’язку, якщо вона була успішною.

Команда pkill

Команда pkill дозволяє знищити процес або процеси за іменем. Вам не потрібно ідентифікувати процес за PID. Щоб використовувати pkill, ви вводите пошуковий термін, який pkill використовує для перевірки зі списком запущених процесів. Процеси зіставлення припиняються. Тож ви повинні бути впевнені, що ви правильно написали пошуковий термін.

Як мережу безпеки ви можете використовувати команду pgrep перед використанням команди pkill. Команда pgrep також приймає пошуковий термін. У ньому буде перераховано PID кожного процесу, який відповідає пошуковому терміну. Це безпечно, оскільки pgrep не видасть жодного сигналу про знищення процесів, і якщо ви неправильно введете пошуковий термін, ви не вб’єте інший процес помилково. Ви можете переконатися, що пошуковий термін правильно продуманий, перш ніж передати його pkill. І pkill, і pgrep розглядають пошуковий термін однаково. Їхнє лікування настільки схоже, що вони поділіться однією сторінкою довідника.

  Як оптимізувати SSD на 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.

  Як використовувати Angry IP Scanner для сканування IP-адреси в Linux

Команда killll діє подібним чином до команди pkill, але з особливою різницею. Замість того, щоб передавати пошуковий термін команді, ви повинні вказати точну назву процесу.

Ви не можете надати часткову відповідність імені процесу; ви повинні вказати повну назву процесу, як показано:

killall shutt
killall shutter

Параметр -y (молодший за) дозволяє припиняти процеси, які працювали менше визначеного періоду. Період подається в числах, за якими йде одна з таких одиниць:

s (секунди)
м (хвилини)
год (години)
d (днів)
w (тижні)
M (місяці, примітка, велика «М»)
y (роки)

Щоб припинити щойно запущений процес під назвою ana і залишити запущеними будь-які старі екземпляри ana, ви можете використовувати наступні параметри з killall, якщо ви відреагували протягом двох хвилин:

killall -y 2m ana

Параметр -o (старший за) дозволяє припиняти процеси, які працювали довше, ніж визначений період. Ця команда знищить усі з’єднання ssh, які працювали більше доби:

killall -o 1d sshd

Не будьте занадто щасливими

Ці команди дозволять вам з точністю та безпекою ідентифікувати та припиняти помилкові процеси.

Завжди будьте обережні. По-перше, переконайтеся, що процес, який ви збираєтеся вбити, дійсно той, який ви хочете. По-друге, двічі перевірте — будьте обережні й переконайтеся, що цільовий процес саме той, який ви хочете завершити. Припиніть процес, коли ви задоволені.