[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rabota-v-cli-bash-chto-takoe-signaly-v-unix-linux":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":22,"progress":23,"seo":24},162,"chto-takoe-signaly-v-unix-linux",4,"rabota-v-cli-bash","Работа в CLI (Bash)","💻","Что такое сигналы в Unix\u002FLinux?","**Сигналы** — это асинхронные уведомления, отправляемые процессам ядром или другими процессами для управления их поведением. Каждый сигнал имеет номер и символическое имя.\n\n### Аналогия\n\nСигналы — как записки, которые менеджер (ядро ОС) может передать работнику (процессу). Одни записки — вежливые просьбы («пожалуйста, завершай работу» — SIGTERM), на которые работник может отреагировать по-своему. Другие — приказы, которые нельзя проигнорировать («ты уволен, охрана выведет» — SIGKILL).\n\n### Основные сигналы\n\n| Сигнал | Номер | Описание | Можно перехватить? |\n|---|---|---|---|\n| `SIGHUP` | 1 | Потеря терминала. Демоны перечитывают конфигурацию | Да |\n| `SIGINT` | 2 | Прерывание (`Ctrl+C`) | Да |\n| `SIGQUIT` | 3 | Quit (`Ctrl+\\`), core dump | Да |\n| `SIGKILL` | 9 | Принудительное завершение | **Нет** |\n| `SIGUSR1` | 10 | Пользовательский сигнал 1. В JVM: thread dump | Да |\n| `SIGUSR2` | 12 | Пользовательский сигнал 2 | Да |\n| `SIGTERM` | 15 | Мягкое завершение (по умолчанию для `kill`) | Да |\n| `SIGCONT` | 18 | Продолжить приостановленный процесс | Да |\n| `SIGSTOP` | 19 | Приостановка процесса | **Нет** |\n| `SIGTSTP` | 20 | Terminal Stop (`Ctrl+Z`) | Да |\n\n### Отправка сигналов\n\n```bash\nkill -SIGTERM 1234               # По имени\nkill -15 1234                    # По номеру\nkill 1234                        # SIGTERM по умолчанию\nkill -9 1234                     # SIGKILL — крайняя мера\n```\n\n### Сигналы и Java-приложения\n\n**SIGTERM** (kill, kill -15) — правильный способ остановки Java-приложения. JVM получает сигнал, выполняет shutdown hooks (зарегистрированные через `Runtime.addShutdownHook()`), Spring Boot корректно завершает контексты, закрывает пулы соединений.\n\n**SIGKILL** (kill -9) — немедленное уничтожение процесса ядром ОС. JVM не имеет возможности выполнить shutdown hooks, ресурсы не освобождаются, транзакции не откатываются. Используйте только если процесс завис и не реагирует на SIGTERM.\n\n```bash\n# Получить thread dump Java-процесса (полезно при диагностике зависаний)\nkill -3 \u003Cjava_pid>                # SIGQUIT — JVM выведет thread dump в stdout\njstack \u003Cjava_pid>                 # Альтернатива через утилиту JDK\n```\n\n### Перехват сигналов в bash-скрипте (trap)\n\n```bash\n#!\u002Fbin\u002Fbash\n# Очистка при получении SIGTERM или SIGINT\ncleanup() {\n    echo \"Cleaning up...\"\n    rm -f \u002Ftmp\u002Fmyapp.lock\n    exit 0\n}\ntrap cleanup SIGTERM SIGINT\n\necho \"Working... PID=$$\"\nwhile true; do\n    sleep 1\ndone\n```\n\n> **На собеседовании:** интервьюер хочет проверить, знаете ли вы разницу между SIGTERM и SIGKILL, и почему нельзя начинать с `kill -9`. Частая ошибка — не знать, что SIGKILL нельзя перехватить, и что JVM при нём не выполняет shutdown hooks, что может привести к потере данных.","","middle",[15,16,17,18,19,20,21],"cli","сигналы","signals","linux","bash","trap","kill",[],null,{"title":25,"description":26,"ogTitle":27,"ogDescription":28,"keywords":29,"schemaAnswer":38,"featuredSnippetReady":39},"Сигналы в Unix\u002FLinux: SIGTERM, SIGKILL, SIGHUP, trap — Gymterview","Что такое сигналы в Unix\u002FLinux: SIGTERM, SIGKILL, SIGHUP, SIGINT и другие. Отправка сигналов через kill, перехват через trap. Таблица сигналов.","Сигналы в Unix\u002FLinux — SIGTERM, SIGKILL, trap | Gymterview","Подробный разбор сигналов Unix: SIGTERM, SIGKILL, SIGHUP, SIGINT — назначение, отправка через kill, перехват через trap в bash-скриптах.",[30,31,32,33,34,35,36,37],"сигналы unix","signals linux","SIGTERM","SIGKILL","SIGHUP","SIGINT","kill сигнал","trap bash","Сигналы — асинхронные уведомления, отправляемые процессам для управления их поведением. Основные: SIGTERM (15) — корректное завершение, SIGKILL (9) — принудительное завершение (нельзя перехватить), SIGINT (2) — прерывание (Ctrl+C), SIGHUP (1) — закрытие терминала. Перехват сигналов в скриптах выполняется через trap.",true]