Как убить процесс в Linux

Если вы новый пользователь 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

Команда Kill информация по команде
Команда Kill информация по команде

Что такое 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

Найдите идентификатор процесса (PID) запущенной программы firefox и сервера apache2.
Найдите идентификатор процесса (PID) запущенной программы firefox и сервера apache2.

Команда pgrep

Вы также можете использовать команду pgrep для поиска идентификатора процесса (PID):

pgrep process
pgrep firefox
pgrep vim

Команда PS для просмотра процессов Linux

Вы можете найти уникальный номер процесса с помощью команды PS в разделе PID

Определение процесса в Linux
Определение процесса в Linux

Как убить процесс в Linux из командной строки

Синтаксис следующий:

kill -[signal] PID
kill -15 PID
kill -9 PID
kill -SIGTERM PID
kill [options] -SIGTERM PID

Какие разрешения Linux или Unix нужны, чтобы убить процесс?

Правила убийства процесса просты:

  1. Вы можете убить все свои собственные процессы.
  2. Только пользователь root может убить процесс системного уровня.
  3. Только пользователь 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.

Nazario

Я — Nazario, создатель и автор сайта linuxwin.ru, специализируюсь на информационных технологиях с акцентом на системное администрирование Linux и Windows, веб-разработку и настройку различных систем.

Linux и Windows
Выскажите своё мнение или присоединяйтесь к обсуждению:

Отправляя комментарий, вы даете согласие на обработку ваших данных в соответствии с политикой конфиденциальности и даёте согласие на их использование.