Thank you for reading this post, don't forget to subscribe!
Команда kill является оболочкой, встроенной в большинство оболочек, полученных из Bourne, таких как Bash и Zsh. Поведение команды немного отличается между оболочками и автономным исполняемым файлом /bin/kill.
Используйте команду type для отображения всех мест в вашей системе, содержащих kill:
1 2 |
type -a kill |
1 2 3 |
kill is a shell builtin kill is /bin/kill |
Вывод выше говорит о том, что встроенная оболочка имеет приоритет над автономным исполняемым файлом и используется всякий раз, когда вы печатаете kill. Если вы хотите использовать двоичный файл, введите полный путь к файлу /bin/kill. В этой статье мы будем использовать встроенную функцию Bash.
Синтаксис команды kill принимает следующую форму:
1 2 |
kill [OPTIONS] [PID].. |
Команда kill отправляет сигнал указанным процессам или группам процессов, заставляя их действовать в соответствии с сигналом. Если сигнал не указан, по умолчанию используется значение -15 (-TERM).
Наиболее часто используемые сигналы:
- 1( HUP) – Перезагрузить процесс.
- 9( KILL) – Убить процесс.
- 15( TERM) – Изящно остановить процесс.
Чтобы получить список всех доступных сигналов, вызовите команду с опцией -l:
1 2 |
kill -l |
Сигналы могут быть указаны тремя различными способами:
- Используя номер (например, -1 или -s 1).
- Используя префикс «SIG» (например, -SIGHUP или -s SIGHUP).
- Без префикса «SIG» (например, -HUP или -s HUP).
Следующие команды эквивалентны друг другу:
1 2 3 4 |
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, сигнал отправляется всем процессам в группе процессов eq с GID, равным абсолютному значению PID.
Обычные пользователи могут отправлять сигналы своим собственным процессам, но не тем, которые принадлежат другим пользователям, в то время как пользователь root может отправлять сигналы процессам других пользователей.
Завершение процессов с помощью команды kill
Чтобы завершить или завершить процесс с помощью команды kill, сначала необходимо найти идентификационный номер процесса (PID). Вы можете сделать это, используя различные команды , такие как top, ps, pidof и pgrep.
Допустим, браузер Firefox перестал отвечать на запросы, и вам нужно убить процесс Firefox. Чтобы найти PID браузера, используйте команду pidof:
1 2 |
pidof firefox |
Команда напечатает идентификаторы всех процессов Firefox:
1 2 |
6263 6199 6142 6076 |
Как только вы узнаете номера процессов, вы можете прекратить их все, отправив сигнал TERM:
1 2 |
kill -9 2551 2514 1963 1856 1771 |
Вместо того, чтобы искать PID и затем завершать процессы, вы можете объединить вышеуказанные команды в одну:
1 2 |
kill -9 $(pidof firefox) |
Перезагрузка процессов с помощью команды kill
Другим распространенным случаем использования kill является отправка сигнала HUP, который сообщает процессам о необходимости перезагрузить его настройки.
Например, чтобы перезагрузить Nginx, вам нужно отправить сигнал ведущему процессу. Идентификатор процесса главного процесса Nginx можно найти в файле nginx.pid, который обычно находится в каталоге /var/run.
Используйте catкоманду, чтобы найти главный PID:
1 2 |
cat /var/run/nginx.pid |
1 2 |
30251 |
Как только вы найдете главный PID, перезагрузите настройки Nginx, набрав:
1 2 |
sudo kill -1 30251 |
Приведенная выше команда должна запускаться от имени пользователя root или пользователя с привилегиями sudo.
Вывод
Команда kill используется для отправки сигнала процессам. Наиболее часто используемым сигналом является SIGKILL или -9, который завершает данные процессы.