Сигналы и kill

Тема дорожной карты · Linux & Unix Fundamentals

Сигналы — это асинхронные уведомления, отправляемые процессу ядром операционной системы. Они используются для управления жизненным циклом процессов, от остановки до перезагрузки конфигурации. Важность сигналов заключается в их способности эффективно управлять процессами, обеспечивая стабильность и безопасность системы.

Как это работает

Сигналы и kill управляются ядром, наблюдаются и контролируются из userspace. Команда ps предоставляет статические снапшоты состояния процессов, в то время как top или htop показывают динамическое изменение состояния процессов в реальном времени. Команды pgrep и pkill позволяют фильтровать процессы по имени или другим критериям. Запуск процесса в фоновом режиме осуществляется с помощью символа &, а команда jobs показывает все активные задания в текущем shell. Команды fg и bg используются для управления фоновыми и передними заданиями соответственно. Команда nohup позволяет запустить процесс так, чтобы он продолжал работу даже после закрытия сессии SSH. Утилиты tmux и screen обеспечивают постоянные сессии, которые не зависят от конкретной терминальной сессии.

Сигналы, такие как SIGTERM (вежливый стоп), SIGKILL (неостановимое уничтожение), SIGHUP (перезагрузка конфигурации), и SIGINT (Ctrl+C), используются для управления процессами. Команда kill -l выводит список всех 31 стандартных сигнала.

Когда применять

Сигналы и kill особенно полезны для управления долгоживущими shell-сессиями на сервере, когда используется tmux. Это позволяет продолжать работу даже после того, как SSH-соединение было разорвано. Для сервиса, который должен продолжать работу после логаута пользователя, рекомендуется использовать нормальный init-менеджер, такой как systemd. Команда nohup может использоваться в крайнем случае, но она не обеспечивает полноценного управления процессом, включая перезапуск и логирование.

Перед применением SIGKILL (9) всегда следует попытаться использовать SIGTERM (15), чтобы процесс мог корректно завершить свои текущие операции. Если процесс отказывается выйти после отправки SIGTERM, тогда можно применить SIGKILL. Прочтите документацию man 7 signal для более подробной информации о сигналах.

Типичные ошибки

Типичные ошибки при работе со сигналами и kill включают использование kill -9 как дефолтного сигнала, что приводит к проблемам с очисткой и сохранением состояния процесса. Зомби-процессы могут возникать, если родительский процесс не делает wait(), что приводит к увеличению числа процессов, показанных командой ps, и увеличению загрузки системы, показанной top. Путаница между PID и thread ID также является распространенной ошибкой, особенно если не использовать правильные опции, такие как -eLf в команде ps. Незнание команд nice и ionice может привести к недостаточному приоритету для критических сервисов, что может привести к нежелательному снижению производительности.

Связанные понятия

Полезные ресурсы

Проверить знания (1)

Загрузка вопросов…