JavaRush /Курсы /Docker SELF /Завершение процессов: команды `kill`, `killall`, `pkill`

Завершение процессов: команды `kill`, `killall`, `pkill`

Docker SELF
2 уровень , 5 лекция
Открыта

1. Завершение процессов

Сегодня мы сделаем шаг дальше и освоим команды, которые позволяют эффективно завершать процессы. Будьте готовы, потому что вашему терпению "зависших" программ скоро придёт конец!

Каждое запущенное приложение или команда в Linux — это процесс. Но что делать, если программа зависла, съедает 100% ресурсов процессора или просто перестала адекватно работать? Задача администратора (или разработчика) — вмешаться и завершить "мятежный" процесс. В Linux для этого используется целый арсенал инструментов: kill, killall и pkill. Не волнуйтесь, несмотря на грозные названия, мы здесь не для того, чтобы ломать всё подряд. Скорее, это изящный способ навести порядок.


2. Команда kill

Основы

Команда kill завершает процесс по его идентификатору (PID). PID — это уникальный номер, который система присваивает каждому процессу. Например, если вы хотите завершить процесс с PID 1234, используйте следующую команду:

kill 1234

Linux по своей природе весьма демократичен, поэтому команда kill отправляет процессу не приказ "умереть", а запрос на завершение. Этот запрос называется "сигнал". По умолчанию kill отправляет сигнал SIGTERM (15).

Что такое сигнал?

Linux использует сигналы для общения с процессами. Это как посылать почтовые открытки с разными намерениями:

  • SIGTERM (15): "Пожалуйста, завершитесь". Это вежливая просьба процессу закончить выполнение.
  • SIGKILL (9): "Ну всё, хватит, ты уволен!" Принудительное завершение процесса.
  • SIGHUP (1): "Эй, перегрузи конфигурацию". Используется для перезапуска некоторых процессов без их остановки.

Пример принудительного завершения процесса:

kill -9 1234

Если процесс отказывается завершаться при SIGTERM, вы можете отправить более жёсткий сигнал — SIGKILL.

Как узнать PID процесса?

Чтобы использовать команду kill, вам нужно знать PID процесса. На помощь приходят уже знакомые команды ps, top или htop. Например, вывод команды ps aux покажет вам все запущенные процессы:

ps aux | grep firefox

Этот запрос найдёт процесс Firefox и выведет его PID.

Процесс завершён, можно выдохнуть. Но что делать, если "зависших" процессов несколько? Здесь в игру вступают команды killall и pkill.


3. Команда killall

Удобство для массового завершения

Команда killall позволяет завершить все процессы с определённым именем. Вы не ищете PID вручную, всё делается гораздо проще. Например, если вы хотите закрыть все запущенные инстансы Firefox:

killall firefox

Как и команда kill, killall отправляет процессы сигналы. Вы можете указать конкретный сигнал:

killall -9 firefox

Полезный совет

Будьте осторожны с командами типа killall. Если вы случайно укажете слишком общий процесс, например, killall python, вы можете завершить сразу все запущенные Python-приложения, включая серверные задачи или важные скрипты.

Какие сигналы поддерживаются?

Для всех команд kill, killall и pkill список доступных сигналов можно посмотреть с помощью команды:

kill -l

4. Команда pkill

Ищем процессы по имени (или его части)

Команда pkill работает схоже с killall, но более гибкая. Она позволяет завершать процессы, которые соответствуют определённому шаблону. Например:

pkill fire

Команда завершит все процессы, которые содержат слово "fire" в имени. Это удобно для случаев, когда имя процесса длинное или вам известна только его часть.

Завершение процессов пользователей

Вы можете завершать процессы, принадлежащие определённым пользователям. Например:

pkill -u username

Это завершит все процессы, принадлежащие пользователю username.

Сравнение kill, killall и pkill

Команда Особенности
kill Завершает процесс по PID. Работает точечно.
killall Завершает все процессы с указанным именем. Удобно для массового закрытия.
pkill Завершает процессы по имени или шаблону. Поддерживает дополнительные параметры, такие как имя пользователя.

5. Практика: завершаем процессы

Давайте попробуем всё, что мы изучили, в действии. Для начала запустим несколько долгоживущих процессов:

sleep 300 &
sleep 400 &
sleep 500 &

Эти команды создадут три фоновых процесса с разным временем ожидания. Теперь вы можете поработать с командами kill, killall и pkill.

  1. Просмотр всех запущенных процессов sleep с помощью команды ps:
ps aux | grep sleep

Вы увидите PID каждого процесса.

  1. Завершите процесс с PID, например, 1234:
kill 1234
  1. Завершите сразу все процессы sleep:
killall sleep
  1. Запустите ещё несколько процессов sleep и завершите их с помощью pkill:
pkill sl

6. Типичные ошибки и важные нюансы

Если вы пытаетесь завершить процесс, к которому у вас нет прав (например, процесс другого пользователя), команда выдаст ошибку. Для этого нужно обладать привилегиями суперпользователя (sudo). Например:

sudo kill 1234

Ещё одним источником путаницы может быть использование слишком агрессивных сигналов -9. Это эквивалентно выключению компьютера из розетки: система не успеет освободить ресурсы или сохранить данные. Используйте SIGKILL только в крайнем случае.

Будьте осторожны с killall и pkill, особенно если вы управляете сервером. Завершение процессов "вслепую" может привести к потере важных данных.


Почему важно знать команды для завершения процессов?

Эти команды имеют широкий спектр применения, начиная от уничтожения зависших приложений и заканчивая управлением серверными процессами. На собеседованиях знание kill и pkill может стать важным показателем вашей компетенции, особенно если речь идёт об администрировании систем или работе с бекендом.

Используйте эти знания для создания скриптов, которые автоматически завершают неподконтрольные процессы или освобождают используемые порты. Например, перед запуском сервера, который занимает порт 8080, можно использовать:

pkill -f "port 8080"

Гибкость и мощь этих команд делают их незаменимыми инструментами любого Linux-специалиста.

1
Задача
Docker SELF, 2 уровень, 5 лекция
Недоступна
Завершение процесса по PID
Завершение процесса по PID
1
Задача
Docker SELF, 2 уровень, 5 лекция
Недоступна
Завершение всех процессов с одинаковым именем
Завершение всех процессов с одинаковым именем
1
Задача
Docker SELF, 2 уровень, 5 лекция
Недоступна
Завершение процессов по шаблону
Завершение процессов по шаблону
1
Задача
Docker SELF, 2 уровень, 5 лекция
Недоступна
Завершение процессов определённого пользователя
Завершение процессов определённого пользователя
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
kokosik Уровень 2
26 декабря 2025
некоторые вещи в лекции не рассматривались, например: - | - grep - echo у меня как у новичка вызывает недоумение, надеюсь вы прислушиваетесь к комментариям пользователей и улучшаете лекции
choo Уровень 2
22 января 2026
непохоже что бы их кто-то читал, в джава курсе косяки годами жили
Gans Electro Уровень 4
12 февраля 2026
В видеоуроке было. Ну может видео потом появились
Ilya Klimchev Уровень 1
28 августа 2025
Ухххахха! Заменил непонятный grep "[s]leep" на grep "sleep", и валидатор начал плеваться ядом. Наверное, потому что процессы не завершились...🤦‍♂️ Можно было бы не тратить время и нервы и просто вставлять код из "правильного" решения, НО и это не всегда срабатывает))