Команда 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