Команда kill у Linux: як безпечно зупинити процеси, що не відповідають

Linux - стабільна система, але застосунки все одно зависають. Коли це трапляється, завислий процес може продовжувати працювати й виснажувати ресурси процесора чи пам'яті, сповільнюючи всю систему. Перезавантаження допомагає, але воно повільне й порушує роботу продакшн-серверів. Саме тому команда kill у Linux є ключовим інструментом адміністратора.

Якщо програма зависла, Linux і далі вважає її активною. Замість того щоб перезапускати все, можна вибрати лише проблемний процес. Команда kill у Linux надсилає цьому процесу сигнал і зупиняє його, допомагаючи швидко відновити стабільність із мінімальними перебоями.

Процеси та ідентифікатори процесів (PID)

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

Щоб визначити PID, Linux надає кілька вбудованих інструментів. Команда top показує в реальному часі список усіх активних процесів разом із використанням ресурсів, тож проблемні процеси легко помітити. Інший поширений підхід - команда ps, яку можна поєднувати з різними опціями, щоб відфільтрувати й знайти саме потрібний процес, перш ніж безпечно й ефективно завершити процес у Linux:

[root@host ~]# ps faux | grep systemd

root 1 0.0 0.6 96656 11260 ? Ss Jan24 0:08 /usr/lib/systemd/systemd --switched-root --system --deserialize 18

root 533 0.0 1.3 125588 22832 ? Ss Jan24 0:25 /usr/lib/systemd/systemd-journald

root 564 0.0 0.5 107440 9248 ? Ss Jan24 0:00 /usr/lib/systemd/systemd-udevd

Dbus 684 0.0 0.3 73540 5524 ? Ss Jan24 0:06 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only

root 743 0.0 0.4 95736 7760 ? Ss Jan24 0:01 /usr/lib/systemd/systemd-logind

root 66199 0.0 0.0 12108 1060 pts/0 S+ 08:28 0:00 \_ grep --color=auto systemd

root 66153 0.0 0.5 93212 9472 ? Ss 08:27 0:00 /usr/lib/systemd/systemd --user

[root@host ~]#

[root@host ~]# ps -eo user,pid,command | grep systemd

root 1 /usr/lib/systemd/systemd --switched-root --system --deserialize 18

root 533 /usr/lib/systemd/systemd-journald

root 564 /usr/lib/systemd/systemd-udevd

dbus 684 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only

root 743 /usr/lib/systemd/systemd-logind

root 66153 /usr/lib/systemd/systemd --user

root 66213 grep --color=auto systemd

[root@host ~]#

Визначити PID також можна за допомогою команд pidof process_name або pgrep process_name: обидві швидко повертають ідентифікатор процесу, пов'язаного з указаною назвою застосунку:

[root@host ~]# pidof systemd

66156 66153 1

[root@host ~]#

[root@host ~]# pgrep systemd

1

533

564

743

66153

[root@host ~]#

Щоб зупинити програму, яка вийшла з-під контролю, адміністратори використовують команду kill у Linux. Цей вбудований інструмент надсилає сигнал певному PID (або завданню), щоб операційна система могла завершити, призупинити чи відновити цільовий процес. Якщо ви хочете знати, як завершити процес у Linux, перший крок завжди однаковий: визначте PID, а потім за допомогою команди kill надішліть відповідний сигнал.

Сигнали kill

Сигнали - це короткі повідомлення, які надсилає процесу ядро, інший процес або сам процес. Для кожного сигналу визначено дію за замовчуванням (disposition), наприклад:

Term: terminate

Ign: ignore

Core: terminate and create a core dump

Stop: pause execution

Cont: resume execution

У більшості випадків команда kill у Linux спочатку надсилає запит на коректне завершення і посилює дію, лише якщо процес відмовляється зупинятися. Linux підтримує до 64 сигналів: 1-31 є стандартними сигналами, а решта - сигналами реального часу. Стандартні сигнали не ставляться в чергу, тоді як сигнали реального часу ставляться в чергу й доставляються по порядку.

Щоб переглянути список сигналів і їхні номери, виконайте kill -l або зверніться до man 7 signal. Розуміння сигналів допомагає правильно використовувати команду kill у Linux, мінімізувати перебої та чисто розв'язувати проблеми із завислими процесами.

Повний список сигналів можна отримати, виконавши kill -l або переглянувши довідку щодо сигналів за допомогою man 7 signal:

[root@host ~]# kill -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 

7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 

13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 

18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 

29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 

36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 

40) SIGRTMIN+641) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 

44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-1451) SIGRTMAX-13 

52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 

56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 

60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 

64) SIGRTMAX

[root@host ~]#

Багато сигналів мають дію за замовчуванням, але програми можуть її перевизначити, задавши обробник («перехопивши» сигнал). Якщо в процесу немає обробника, застосовується поведінка за замовчуванням; для деяких сигналів це може означати, що сигнал ігнорується. Є два винятки: SIGKILL і SIGSTOP. Їх не можна перехопити, заблокувати чи проігнорувати. SIGTERM можна обробити або проігнорувати, тож упертий застосунок може залишитися активним після запиту SIGTERM. Тоді ви посилюєте дію й надсилаєте SIGKILL, щоб негайно його завершити. Використовуйте SIGKILL якомога рідше, адже він не дає виконати очищення і може залишити після себе тимчасові файли.

У прикладі нижче kill -15 не спрацьовує, тому Linux завершує процес примусово:

[root@host ~]# ps -eo user,pid,command | grep java

tomcat 59815 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat9 -Dcatalina.home=/usr/local/tomcat9 -Djava.io.tmpdir=/usr/local/tomcat9/temp org.apache.catalina.startup.Bootstrap start

root 66401 grep --color=auto java

[root@host ~]# kill -15 59815

[root@host ~]#

Як використовувати команду kill у Linux?

Команда kill у Linux дає змогу надсилати сигнали процесам і підпорядковується кільком важливим правилам щодо прав доступу та PID. Загалом звичайний користувач може надсилати сигнали лише своїм процесам, тоді як користувач root може надсилати сигнали будь-якому процесу в системі.

Поведінка команди kill у Linux залежить від указаного PID (або значення, подібного до PID):

PID > 0 - sends the chosen signal to the single process with that PID.

PID = 0 - targets every process in the current shell's process group (PGID).

PID = -1 - targets all processes that share the same user ID as the user running the command (use with caution).

PID < -1 - targets the process group whose PGID equals the absolute value of the number.

Який синтаксис і базове використання команди kill у Linux?

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

Сигнали можна вказувати в кількох форматах:

By number: kill -9 <PID>

With SIG prefix: kill -SIGKILL <PID>

Without SIG prefix: kill -KILL <PID>

На практиці зазвичай починають із SIGTERM і посилюють дію лише за потреби. Наприклад, якщо kill -15 <PID> не зупиняє завислий Java-процес, команда kill -9 <PID> (SIGKILL) примусово й негайно його завершить. Команда kill у Linux є потужним інструментом, тому сильніші сигнали слід використовувати з обережністю, особливо якщо ви впливаєте на групи процесів або на кілька запущених процесів:

[root@host ~]# ps -eo user,pid,command | grep java

tomcat 66469 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat9 -Dcatalina.home=/usr/local/tomcat9 -Djava.io.tmpdir=/usr/local/tomcat9/temp org.apache.catalina.startup.Bootstrap start

root 66516 grep --color=auto java

[root@host ~]# kill -9 66469

[root@host ~]# 

[root@host ~]# ps -eo user,pid,command | grep java

root 66530 grep --color=auto java

[root@host ~]#

Щоб використати команду kill у Linux, дотримуйтеся такого синтаксису:

kill [OPTIONS] [PID]

Наприклад, якщо процес httpd має PID 21567, можна запитати його коректне завершення, надіславши сигнал TERM за замовчуванням:

kill 21567

Якщо процес усе одно не зупиняється, можна примусово завершити його за допомогою SIGKILL (без очищення й очікування):

kill -9 21567

kill -SIGKILL 21567

kill -KILL 21567

Як завершити процес за його ідентифікатором

Щоб зупинити застосунок, спочатку потрібно дізнатися його ідентифікатор процесу, або PID. Один із найшвидших способів його знайти - вивести список запущених процесів за допомогою ps і відфільтрувати результат за назвою. Наприклад, щоб знайти Firefox:

ps aux | grep firefox

Переконавшись, що PID правильний, можна негайно завершити процес, надіславши SIGKILL:

kill -9 PID

Як завершити кілька процесів одночасно

Якщо некоректно працюють кілька пов'язаних процесів, їх можна зупинити однією командою, указавши кілька PID:

kill -9 PID_1 PID_2 PID_3

Як надсилати певні сигнали за допомогою команди kill у Linux

Команда kill у Linux надсилає сигнал процесу з використанням такого загального синтаксису:

kill [signal] PID

Сигнали можна задавати у трьох поширених форматах:

  • За номером (ідентифікатором сигналу)
  • З префіксом SIG
  • Без префікса SIG

Щоб переглянути всі доступні сигнали та їхні номери, виконайте:

kill -l

1) Задати сигнал за номером

SIGKILL - це сигнал 9, тож щоб примусово зупинити PID 9338:

kill -9 9338

2) Задати сигнал із префіксом SIG

Та сама дія з використанням назви SIG:

kill -SIGKILL 9338

3) Задати сигнал без префікса SIG

Можна також опустити SIG і використати назву сигналу безпосередньо:

kill -KILL 9338

Як коректно завершити процес за допомогою SIGTERM

Якщо вам потрібне чисте завершення, використовуйте SIGTERM (15). SIGTERM просить процес завершитися й дає йому час правильно закрити ресурси. Якщо процес ігнорує SIGTERM або не зупиняється, можна перейти до SIGKILL, який примусово й негайно завершує процес і не дає виконати очищення.

Розширені прийоми роботи з командою kill у Linux

Під час роботи з упертими або повторюваними завданнями команда kill у Linux не єдиний варіант. Утиліти pkill і skill можуть пришвидшити керування процесами, особливо коли потрібно вибирати процеси за назвою, а не за PID.

Використання pkill для зупинки процесів за назвою

pkill надсилає сигнали процесам, які відповідають певним критеріям, як-от повна чи часткова назва процесу, користувач, якому належить процес, або інші атрибути. Якщо запустити її без опцій, вона за замовчуванням надсилає SIGTERM (15) кожному відповідному процесу. Наприклад, щоб коректно зупинити всі процеси Firefox, використайте:

pkill -15 firefox

Оскільки pkill підтримує зіставлення за шаблоном, точна назва процесу не потрібна. Наприклад, якщо ви хочете зупинити httpd і знаєте, що його назва містить «http», можна виконати:

pkill http

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

Докладніше про skill

skill - ще одна утиліта для надсилання сигналів із подібним призначенням. Вона використовує звичну поведінку сигналів і зазвичай за замовчуванням надсилає SIGTERM, що робить її корисною для стандартного коректного завершення під час роботи з правилами зіставлення та вибіркового відбору процесів, наприклад, із фільтрацією за користувачем або за критеріями групи процесів:

skill [signal] [options]

[root@host ~]# ps -eo user,pid,command | grep tomcat

tomcat 66546 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat9 -Dcatalina.home=/usr/local/tomcat9 -Djava.io.tmpdir=/usr/local/tomcat9/temp org.apache.catalina.startup.Bootstrap start.

root 66846 grep --color=auto tomcat

[root@host ~]# skill -9 66546

Замість skill рекомендується використовувати команди kill, pkill або killall.

Як завершити кілька процесів за назвою за допомогою killall

Утиліта killall - це інструмент командного рядка Linux, який завершує процеси за назвою виконуваного файлу, а не за PID. Це зручно, коли застосунок запускає кілька однакових робочих процесів і ви хочете зупинити їх разом, не шукаючи вручну кожен ідентифікатор процесу.

Базовий синтаксис виглядає так:

$ killall process_name

Наприклад, щоб запитати чисте завершення всіх екземплярів Firefox, використайте:

$ killall firefox

За замовчуванням надсилається сигнал завершення (SIGTERM), що дає програмі можливість закрити файли, зняти блокування й нормально завершитися. Коли процес завис або ігнорує SIGTERM, можна передати сильніший сигнал, щоб негайно примусово його зупинити:

$ killall -s SIGKILL firefox

Сигнали також можна вказувати за номером. Наступна команда примусово зупиняє Apache в системах, де служба працює під назвою процесу httpd:

$ killall -9 httpd

Як працює зіставлення назв і типові помилки

Зіставлення назв точне, тому вибираються лише процеси, назва яких збігається з аргументом. Оскільки Apache зазвичай використовує httpd, а не http, наступна команда, як правило, повертає помилку про те, що такого процесу не існує:

$ killall http

Перш ніж надсилати деструктивний сигнал, перевірте справжню назву процесу за допомогою ps або pgrep, щоб не промахнутися повз ціль і не зупинити не ту службу.

Як надіслати сигнал усій групі процесів за допомогою killpg

Іноді потрібно вплинути на цілу групу пов'язаних процесів, запущених з одного сеансу. Команда killpg надсилає сигнал кожному процесу у вказаній групі процесів (pgrp). Якщо pgrp дорівнює 0, сигнал доставляється поточній групі процесів того, хто викликає команду; інакше сигнал отримують усі процеси цієї групи.

Цей спосіб ідеально підходить для очищення, але в продакшн-середовищах завжди двічі перевіряйте шаблони.

Поєднання kill із ps і grep

Команда ps показує, що запущено, зокрема назву процесу, PID, власника й стан, що допомагає переконатися, що ви вибрали правильний застосунок, перш ніж надсилати сигнал за допомогою kill. Щоб не переглядати довгий список, використовуйте grep для фільтрації результату: так ви швидко знайдете потрібний процес і PID і зменшите ризик завершити не той процес.

Робота з процесами, що не відповідають

Процеси Linux можуть перебувати в різних станах, зокрема Running (R, виконується), Interruptible sleep (S, переривний сон), Uninterruptible sleep (D, непереривний сон), Stopped (T, зупинений) і Zombie (Z, зомбі). Процеси, що застрягли в стані D або позначені як Z, часто потребують уваги. Відфільтрувати процеси за станом можна так:

ps aux | awk '{if ($8=="D") print}'

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

Керування процесами інших користувачів

Звичайний користувач може завершувати лише власні процеси. Якщо ви системний адміністратор і вам потрібно зупинити процес, що належить іншому обліковому запису, виконайте команду з підвищеними правами за допомогою sudo або працюйте від імені root.

Коли слід завершувати процес примусово?

Якщо SIGTERM не зупиняє застосунок, SIGKILL завершує його негайно. Оскільки SIGKILL не можна перехопити, заблокувати чи проігнорувати, його слід використовувати лише після того, як спроби коректного завершення не вдалися.

Розширені команди й прийоми керування процесами в Linux

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

1. Команда mysql_zap

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

Синтаксис:

[root@host ~]# mysql_zap [signal] [pattern]

Важливо зазначити, що mysql_zap вважається застарілою в MariaDB, починаючи з версії 10.2. Як сучасну й підтримувану альтернативу адміністраторам рекомендується використовувати pkill, яка має подібну функціональність зіставлення за шаблоном.

2. Керування запитами MySQL за допомогою mk-kill

Команда mk-kill орієнтована на керування на рівні бази даних, а не системних процесів. Вона використовується для завершення запитів MySQL, що відповідають певним критеріям. Якщо передано файл, mk-kill зчитує дані про запити з цього файлу, який зазвичай містить вивід SHOW PROCESSLIST. Якщо файл не вказано, вона автоматично виконує SHOW PROCESSLIST на сервері MySQL.

Приклади:

[root@host ~]# mk-kill --busy-time 60 --print

[root@host ~]# mk-kill --match-command Sleep --kill --no-only-oldest --interval 10

Перший приклад визначає запити, що виконуються довше ніж 60 секунд. Другий приклад кожні 10 секунд перевіряє наявність запитів у стані сну й завершує всі знайдені. Це робить mk-kill особливо корисною для підтримання швидкодії бази даних.

3. Завершення повільних запитів за допомогою mkill

Команда mkill тісно пов'язана з mk-kill і призначена для зупинки повільних запитів MySQL. Вона оцінює запити за кількома критеріями, зокрема:

  • Час виконання запиту
  • Хост
  • Користувач
  • База даних
  • Стан запиту
  • Вміст запиту

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

4. Завершення окремих потоків за допомогою tkill і tgkill

Для випадків, коли краще завершити один потік, ніж зупиняти весь процес, Linux пропонує tkill і tgkill. Команда tkill застаріла й ідентифікує потоки лише за ідентифікатором потоку, що може призвести до завершення не того потоку, якщо ідентифікатори потоків використовуються повторно.

Команда tgkill підвищує безпеку, оскільки вимагає і ідентифікатор потоку, і ідентифікатор групи потоків (TGID), що гарантує отримання сигналу потрібним потоком.

5. Надсилання сигналів групам процесів за допомогою killpg

Команда killpg надсилає сигнал цілій групі процесів. Якщо ідентифікатор групи процесів дорівнює 0, сигнал надсилається групі процесів того, хто викликає команду. Інакше сигнал доставляється всім процесам, пов'язаним із вказаною групою. Цей підхід корисний для зупинки пов'язаних фонових завдань, запущених в одному сеансі.

6. Розрив активних TCP-з'єднань за допомогою tcpkill

Команда tcpkill дає змогу адміністраторам переривати активні TCP-з'єднання. Вона може прослуховувати певний мережевий інтерфейс і застосовувати різні рівні сили під час розриву з'єднання. Рівень сили за замовчуванням - 3.

Синтаксис:

[root@host ~]# tcpkill [-i interface] [-1...9] expression

[root@host ~]# tcpkill -i eth0 port 21

Цей інструмент часто використовують, щоб негайно відключити проблемні або несанкціоновані мережеві сеанси.

7. Зупинка процесів у контейнерах за допомогою lxc-kill

Під час роботи з контейнерними середовищами, як-от LXC, Kubernetes або Docker в Ubuntu, команду lxc-kill можна використовувати для надсилання числового сигналу головному процесу всередині контейнера.

Синтаксис:

lxc-kill --name=NAME SIGNUM

Це забезпечує безпосереднє керування життєвим циклом контейнера та завершенням процесів.

8. Керування розподіленими завданнями за допомогою arckill

Команда arckill використовується в середовищах грід-обчислень з підтримкою ARC. ARC (Advanced Resource Connector) надає єдиний інтерфейс для надсилання обчислювальних завдань і керування ними в розподілених системах. Завдання можна завершити за ідентифікатором завдання або за назвою надісланого завдання.

Приклад:

arckill -j filename.xml (<jobid#>)

9. Завершення процесів PVM за допомогою pvm_kill

Щоб зупинити певний процес у середовищі Parallel Virtual Machine (PVM), команда pvm_kill надсилає сигнал завершення процесу, визначеному за ідентифікатором завдання (TID). Цю команду зазвичай викликають зсередини більших застосунків.

Приклади:

In C: info = pvm_kill( tid );

In Fortran: CALL PVMFKILL( TID, INFO )

10. Закриття завислих графічних застосунків за допомогою xkill

Команда xkill надає графічний спосіб завершення застосунків, що не відповідають. Коли її запускають у середовищі робочого столу, курсор змінює вигляд, і ви можете клацнути завислим вікном. Після цього X-сервер негайно завершує пов'язану програму.

Синтаксис:

xkill [-display displayname] [-id resource] [-button number] [-frame] [-all]

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

Запобіжні заходи та найкращі практики завершення процесів

Зупинка процесу не завжди є чистим скиданням. Якщо застосунок записує дані на диск, утримує блокування, обслуговує активні сеанси або взаємодіє з іншими службами, раптова зупинка може залишити пошкоджені тимчасові дані, завислі файли блокування, незавершені транзакції або осиротілі дочірні процеси. Сприймайте завершення процесу як контрольоване втручання, а не як рефлекс: переконайтеся, що PID правильний, зрозумійте, що робить служба, і не чіпайте критично важливі системні демони, якщо не готові до побічних ефектів, як-от збої входу в систему, проблеми з мережею чи простої. За можливості починайте із сигналів коректного завершення й посилюйте дію лише тоді, коли процес очевидно завис.

Висновок

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

Blog