Что делает команда kill?devops-34

Основное назначение

Команда kill в Unix/Linux системах отправляет сигналы процессам, а не только "убивает" их, как можно предположить из названия. По умолчанию (без указания сигнала) она отправляет сигнал TERM (SIGTERM), который запрашивает корректное завершение процесса.

Синтаксис команды

kill [опции] <PID>...

Где <PID> - это идентификатор процесса (Process ID)

Основные сигналы и их использование

1. Основные сигналы:

СигналЧислоНазначение
TERM15Запрос корректного завершения (по умолчанию)
KILL9Безусловное завершение
HUP1Перезагрузка (часто для релоада конфигов)
INT2Аналог Ctrl+C (прерывание)
STOP19Приостановка процесса
CONT18Продолжение приостановленного процесса

2. Примеры использования:

kill -9 1234         # Немедленное завершение процесса 1234
kill -HUP 5678       # Перезапуск демона (например, nginx)
kill -TERM 9101      # Вежливый запрос на завершение
kill -STOP 2345      # Приостановка процесса
kill -CONT 2345      # Возобновление приостановленного процесса

Важные опции

-l      # Показать список всех доступных сигналов
-s SIG  # Указать сигнал по имени (например, -s KILL)
-n NUM  # Указать сигнал по номеру (например, -n 9)

Как найти PID для отправки сигнала

  1. Через ps:

    ps aux | grep nginx
    
  2. Через pgrep:

    pgrep -f nginx
    
  3. Через pidof:

    pidof nginx
    

Особенности работы

  1. Разные виды kill:

    • Встроенная команда shell (/bin/kill)
    • Утилита (/usr/bin/kill)
  2. Отправка сигналов группе процессов:

    kill -TERM -1234  # Отправка сигнала группе процессов 1234
    
  3. Отправка сигналов по имени процесса:

    pkill nginx       # Отправка SIGTERM всем процессам nginx
    

Практические сценарии использования

  1. Корректный перезапуск сервиса:

    kill -HUP $(cat /var/run/nginx.pid)
    
  2. Завершение зависшего процесса:

    kill -TERM 1234   # Сначала вежливый запрос
    sleep 5
    kill -KILL 1234   # Затем принудительное завершение
    
  3. Отладка приложений:

    kill -USR1 5678   # Многие демоны используют для отладки
    

Безопасность и ограничения

  1. Права доступа:

    • Обычный пользователь может отправлять сигналы только своим процессам
    • root может отправлять сигналы любым процессам
  2. Неперехватываемые сигналы:

    • SIGKILL (9) и SIGSTOP (19) нельзя перехватить или проигнорировать
  3. Последствия SIGKILL:

    • Может привести к:
      • Потере данных
      • Повреждению файлов
      • Проблемам с блокировками

Альтернативные команды

  1. pkill - отправка сигналов по имени процесса:

    pkill -f "python script.py"
    
  2. killall - отправка сигналов всем процессам с указанным именем:

    killall nginx
    

Резюмируем

  1. Основное назначение:

    • Отправка сигналов процессам (не только завершение)
    • Управление поведением процессов
  2. Ключевые сигналы:

    • TERM (15) - вежливый запрос на завершение
    • KILL (9) - безусловное завершение
    • HUP (1) - перезагрузка конфигурации
  3. Лучшие практики:

    • Всегда сначала пробовать SIGTERM
    • Использовать SIGKILL только когда другие методы не работают
    • Проверять PID перед отправкой сигнала
  4. Для DevOps:

    • Важно понимать разницу между сигналами
    • Использовать правильные сигналы в скриптах
    • Знать альтернативные команды (pkill, killall)

Команда kill - это мощный инструмент управления процессами, который должен использоваться осознанно и аккуратно.