- Список распространенных сигналов TERM в Linux или Unix
- Что такое PID?
- Команда pgrep
- Команда PS для просмотра процессов Linux
- Как убить процесс в Linux из командной строки
- Какие разрешения Linux или Unix нужны, чтобы убить процесс?
- Примеры команд kill для завершения процесса в Linux
- Шаг 1 — Узнайте PID (идентификатор процесса) lighttpd
- Шаг 2 — убить процесс с помощью PID
- Шаг 3 — Как узнать, что процесс завершен / убит
- Как убить два или более PID в Linux?
- Команда killall
- Заключение
Если вы новый пользователь Linux, то вам требуется знать. Как убить (завершить) процесс в Linux, используя параметры командной строки? Как я могу убить запущенный процесс на Unix?
Linux и другие Unix — подобные операционные системы поставляются с командой kill. Данная команда позволяет завершить зависшие или нежелательные процессы без необходимости выхода из системы или перезапуска сервера или ПК.
Команда kill посылает заданный сигнал, например, KILL process, указанному процессу или группе процессов. Если сигнал не указан, посылается сигнал TERM. Обратите внимание, что команда kill может быть внутренней, как часть встроенной функции оболочки. Или внешней, расположенной по адресу /bin/kill. Синтаксис остаётся аналогичным независимо от того, какая команда внутренняя или внешняя.
Список распространенных сигналов TERM в Linux или Unix
Linux и Unix-подобные операционные системы поддерживают стандартные сигналы завершения, они перечисленные ниже:
SIGHUP (1) — обнаружено зависание на управляющем терминале или смерть управляющего процесса. Используйте SIGHUP для перезагрузки файлов конфигурации и открытия/закрытия файлов журнала.
SIGKILL (9) — это сигнал убийства. Используйте SIGKILL в качестве последнего средства для уничтожения процесса. Он не сохранит данные и не очистит процесс.
SIGTERM (15) — сигнал завершения. Это стандартный и самый безопасный способ завершения процесса.
Команды kill и killall поддерживают более 60 сигналов. Однако большинству пользователей необходимо использовать только сигнал 9 или 15. Чтобы получить полный список сигналов, введите:
sudo kill -l
Что такое PID?
Процесс в Linux или Unix — это запущенный экземпляр программы. Например, Firefox — это запущенный процесс, если вы просматриваете Интернет. Каждый раз, когда вы запускаете браузер Firefox в системе автоматически присваивается уникальный идентификационный номер процесса (PID). PID автоматически присваивается каждому процессу при его создании в системе. Чтобы узнать PID процесса firefox или httpd, используйте следующую команду pidof:
pidof httpd
pidof apache2
pidof firefox
Или используйте комбинацию команды ps и команды grep/egrep:
ps aux | grep httpd
ps aux | grep apache2
ps aux | grep firefox
Команда pgrep
Вы также можете использовать команду pgrep для поиска идентификатора процесса (PID):
pgrep process
pgrep firefox
pgrep vim
Команда PS для просмотра процессов Linux
Вы можете найти уникальный номер процесса с помощью команды PS в разделе PID
Как убить процесс в Linux из командной строки
Синтаксис следующий:
kill -[signal] PID
kill -15 PID
kill -9 PID
kill -SIGTERM PID
kill [options] -SIGTERM PID
Какие разрешения Linux или Unix нужны, чтобы убить процесс?
Правила убийства процесса просты:
- Вы можете убить все свои собственные процессы.
- Только пользователь root может убить процесс системного уровня.
- Только пользователь root может убить процесс, запущенный другими пользователями.
Примеры команд kill для завершения процесса в Linux
В этом примере я собираюсь убить серверный процесс lighttpd.
Шаг 1 — Узнайте PID (идентификатор процесса) lighttpd
Чтобы узнать PID любой программы, используйте команду ps или pidof. Например, если имя процесса — lighttpd, вы можете использовать любую из следующих команд для получения идентификатора процесса:
pidof lighttpd
Примерный ответ терминала:
3486
Или такой ответ:
lighttpd 3486 0.0 0.1 4248 1432 ? S Jul31 0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd 3492 0.0 0.5 13752 3936 ? Ss Jul31 0:00 /usr/bin/php5-cg
Шаг 2 — убить процесс с помощью PID
Процессу lighttpd присвоен PID # 3486. Чтобы убить процесс lighttpd, требуется передать PID следующим образом:
# kill 3486
или
$ sudo kill 3486
Эта команда приведет к завершению процесса с PID 3486.
Шаг 3 — Как узнать, что процесс завершен / убит
Опять используйте команду ps или команду pidof, ну или команду pgrep следующим образом:
$ ps aux | grep lighttpd
$ pidof lighttpd
$ pgrep lighttpd
На экране не должно быть никакого вывода или PID.
Замечание об отправке более сильного сигнала # 9 (SIGKILL).
Если в команде kill не указан сигнал, по умолчанию посылается сигнал # 15 (SIGTERM). Таким образом, команда kill 3486 аналогична следующей команде:
# kill -15 3486
# kill -SIGTERM 3486
Или
$ sudo kill -15 3486
$ sudo kill -SIGTERM 3486
В некоторых случаях сигнала # 15 недостаточно. Например, lighttpd может не быть убит сигналом # 15 из-за открытых сокетов. Поэтому процесс (PID) # 3486 надо убить мощным сигналом # 9:
# kill -9 3486
# kill -SIGKILL 3486
Или
$ sudo kill -9 3486
$ sudo kill -SIGKILL 3486
Где -9 или -SIGKILL — это специальный сигнал kill, который почти гарантированно убивает процесс железным кулаком.
Как убить два или более PID в Linux?
Для того чтобы убить два или более PID, можно использовать одну команду:
kill pid1 pid2 pid3
kill -15 pid1 pid2 pid3
kill -9 pid1 pid2 pid3
kill -9 3546 5557 4242
Команда killall
killall — это команда только для Linux. Она может быть доступна во FreeBSD и других Unix-подобных системах, таких как macOS, для уничтожения процессов по имени. Поэтому нет необходимости искать PID с помощью команд «pidof process» или «ps aux | grep process». Синтаксис команды следующий:
killall {Process-Name-Here}
killall -9 {Process-Name-Here}
killall -15 {Process-Name-Here}
Например чтобы убить процесс на сервере lighttpd, введите:
# killall -15 lighttpd
Или
# killall -9 lighttpd
Например чтоб завершить процесс веб-браузера Firefox, введите:
# killall -9 firefox-bin
Внимание: Не используйте команду killall в операционных системах Solaris Unix.
Заключение
В этой стате мы показали как посмотреть и убить процесс из командной строки в Linux и Unix-подобных операционных системах. Как я уже говорил, команда killall в UNIX-подобных системах делает кое-что еще. Она убивает все процессы, а не только определенный процесс. Не используйте killall в Solaris.