Ответ
SIGHUP
(Signal Hang Up) — это сигнал, который исторически отправлялся процессу, когда его управляющий терминал отключался.
- Поведение по умолчанию: Завершение процесса.
- Современное использование: В серверных приложениях и демонах
SIGHUP
принято перехватывать и использовать как триггер для перезагрузки конфигурации без остановки сервиса (zero-downtime reload). Это позволяет применять новые настройки (например, изменить уровень логирования или таймауты) "на лету".
Отправить сигнал процессу можно командой kill
:
kill -HUP <process_id>
Пример обработки SIGHUP
в Go:
package main
import (
"log"
"os"
"os/signal"
"syscall"
"time"
)
// loadConfig - функция, имитирующая загрузку конфигурации
func loadConfig() {
log.Println("Configuration reloaded!")
// Здесь могла бы быть логика чтения файла .yaml, .json и т.д.
}
func main() {
// Создаем канал для получения сигналов ОС
sigChan := make(chan os.Signal, 1)
// Уведомляем канал о получении сигнала SIGHUP
signal.Notify(sigChan, syscall.SIGHUP)
// Запускаем горутину для обработки сигналов
go func() {
for {
// Блокируемся до получения сигнала
<-sigChan
log.Println("Received SIGHUP. Reloading configuration...")
loadConfig()
}
}()
log.Println("Server started. PID:", os.Getpid())
log.Println("Waiting for SIGHUP signal (e.g., 'kill -HUP', os.Getpid())...")
// Бесконечный цикл, чтобы приложение не завершалось
for {
time.Sleep(10 * time.Second)
}
}