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.
- Просмотр всех запущенных процессов
sleepс помощью командыps:
ps aux | grep sleep
Вы увидите PID каждого процесса.
- Завершите процесс с PID, например, 1234:
kill 1234
- Завершите сразу все процессы
sleep:
killall sleep
- Запустите ещё несколько процессов
sleepи завершите их с помощьюpkill:
pkill sl
6. Типичные ошибки и важные нюансы
Если вы пытаетесь завершить процесс, к которому у вас нет прав (например, процесс другого пользователя), команда выдаст ошибку. Для этого нужно обладать привилегиями суперпользователя (sudo). Например:
sudo kill 1234
Ещё одним источником путаницы может быть использование слишком агрессивных сигналов -9. Это эквивалентно выключению компьютера из розетки: система не успеет освободить ресурсы или сохранить данные. Используйте SIGKILL только в крайнем случае.
Будьте осторожны с killall и pkill, особенно если вы управляете сервером. Завершение процессов "вслепую" может привести к потере важных данных.
Почему важно знать команды для завершения процессов?
Эти команды имеют широкий спектр применения, начиная от уничтожения зависших приложений и заканчивая управлением серверными процессами. На собеседованиях знание kill и pkill может стать важным показателем вашей компетенции, особенно если речь идёт об администрировании систем или работе с бекендом.
Используйте эти знания для создания скриптов, которые автоматически завершают неподконтрольные процессы или освобождают используемые порты. Например, перед запуском сервера, который занимает порт 8080, можно использовать:
pkill -f "port 8080"
Гибкость и мощь этих команд делают их незаменимыми инструментами любого Linux-специалиста.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ