Введение
Некоторые приложения могут начать работать нестабильно и перестать отвечать на запросы или начать потреблять много системных ресурсов. Не отвечающие приложения не могут быть перезапущены, потому что исходный процесс приложения никогда не останавливается полностью. Единственное решение — перезагрузить систему или завершить процесс приложения.
Существует несколько утилит, позволяющих убивать неправильные процессы, наиболее часто используемая команда kill
.
Команда убить
kill
— это оболочка, встроенная в большинство оболочек, производных от Bourne, таких как Bash и Zsh. Поведение команды немного различается между оболочками и автономным исполняемым файлом /bin/kill
.
Используйте команду type
для просмотра всех мест в вашей системе, содержащих kill
:
type -a kill
kill is a shell builtin
kill is /bin/kill
Вывод выше показывает, что встроенная оболочка имеет приоритет над автономным исполняемым файлом и используется каждый раз, когда вы набираете kill
. Если вы хотите использовать бинарный файл, введите полный путь к файлу /bin/kill
. В этой статье мы будем использовать встроенный Bash.
Синтаксис команды kill
имеет следующий вид:
kill [OPTIONS] [PID]..
Команда kill
отправляет сигнал указанным процессам или группам процессов, заставляя их действовать на основе сигнала. Если сигнал не указан, по умолчанию он равен -15
(-TERM).
Наиболее часто используемые сигналы:
1
(HUP
) — перезагрузить процесс.9
(KILL
) - Завершить процесс.15
(TERM
) — изящно останавливает процесс.
Чтобы получить список всех доступных сигналов, вызовите команду с параметром -l
:
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+6 41) 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-14 51) 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
Сигналы могут быть указаны тремя различными способами:
- Использование числа (например,
-1
ИЛИ-s 1
). - Использование префикса «SIG» (например
-SIGHUP
ИЛИ-s SIGHUP
). - Без префикса «SIG» (например,
-HUP
ИЛИ-s HUP
).
Следующие команды эквивалентны друг другу:
kill -1 PID_NUMBER
kill -SIGHUP PID_NUMBER
kill -HUP PID_NUMBER
PID, данные команде kill
, могут быть одним из следующих:
- Если
PID
больше нуля, сигнал отправляется процессу с идентификатором, равнымPID
. - Если
PID
равен нулю, сигнал отправляется всем процессам в текущей группе процессов. Другими словами, сигнал отправляется всем процессам, принадлежащим GID оболочки, вызвавшим командуkill
. Используйте командуps -efj
для просмотра идентификаторов групп процессов (GID). - Если
PID
равен-1
, сигнал отправляется всем процессам с тем же UID, что и у пользователя, вызывающего команду. Если пользователь, которого он вызывает, является root, сигнал отправляется всем процессам, кроме init и самого процессаkill
. - Если
PID
меньше-1
, сигнал отправляется всем процессам в группе процессов и с GID, равным абсолютному значениюPID
.
Обычные пользователи могут отправлять сигналы своим собственным процессам, но не процессам, принадлежащим другим пользователям, в то время как пользователь root может отправлять сигналы процессам других пользователей.
Убить процессы с помощью команды Kill
Чтобы убить или убить процесс с помощью команды kill
, вы должны сначала найти идентификационный номер процесса (PID). Вы можете сделать это с помощью различных команд, таких как top
, ps
, pidof
и pgrep
.
Допустим, браузер Firefox не ответил, и вам нужно остановить процесс Firefox. Чтобы найти PID браузера, используйте команду pidof
:
pidof firefox
Команда напечатает идентификаторы всех процессов Firefox:
6263 6199 6142 6076
Как только вы узнаете номера процессов, вы можете убить их всех, отправив сигнал TERM
:
kill -9 2551 2514 1963 1856 1771
Вместо того, чтобы искать PID и затем убивать процессы, вы можете объединить приведенные выше команды в одну:
kill -9 $(pidof firefox)
Перезагрузите процессы с помощью команды Kill
Другим распространенным вариантом использования команды kill
является отправка сигнала HUP
, который указывает процессам перезагрузить свои настройки.
Например, чтобы перезагрузить Nginx, нужно отправить сигнал основному процессу. Идентификатор процесса главного процесса Nginx можно найти в файле nginx.pid
, который обычно находится в каталоге /var/run
.
Используйте команду cat
, чтобы найти основной PID:
cat /var/run/nginx.pid
30251
Как только основной PID будет найден, перезагрузите настройки Nginx, набрав:
sudo kill -1 30251
Вышеупомянутая команда должна быть запущена от имени пользователя root или пользователя с привилегиями sudo.
Вывод
Команда kill
используется для отправки сигнала процессам. Наиболее часто используется сигнал SIGKILL
или -9
, который завершает указанные процессы.