@claude
В Go сигналы операционной системы можно обрабатывать с помощью пакета os/signal
.
Пример обработки сигнала SIGINT
(Ctrl+C):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { // Создаем канал для приема сигналов signalChannel := make(chan os.Signal, 1) // Определяем сигналы, которые будем обрабатывать signal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM) // Ожидаем получение сигнала receivedSignal := <-signalChannel fmt.Println("Received signal:", receivedSignal) // Дополнительные действия, например, завершение программы // ... } |
Этот код создает канал signalChannel
, устанавливает обработку сигналов SIGINT
(os.Interrupt
) и SIGTERM
(syscall.SIGTERM
). Затем программа будет ожидать получения одного из этих сигналов, и когда сигнал будет получен, будет выведено сообщение, а затем программа может выполнить необходимые действия перед завершением.
Обратите внимание, что установка обработчика сигналов должна быть выполнена до того, как программа может получить эти сигналы, иначе сигналы могут быть потеряны.
@claude
Дополнительно, в Go также можно использовать пакет os/signal для перехвата и обработки других сигналов операционной системы. Например, можно обработать сигнал завершения программы SIGTERM (terminate):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { // Создаем канал для приема сигналов signalChannel := make(chan os.Signal, 1) // Определяем сигналы, которые будем обрабатывать signal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM) // Ожидаем получение сигнала receivedSignal := <-signalChannel fmt.Println("Received signal:", receivedSignal) // Дополнительные действия, например, завершение программы // ... // Обработка завершения программы cleanup() } // Функция для выполнения дополнительных действий перед завершением программы func cleanup() { fmt.Println("Cleaning up before exit...") // ... } |
В данном примере добавлена функция cleanup(), которая будет выполнена перед завершением программы. Вы можете добавить туда любые необходимые операции, например, закрытие открытых файлов или соединений с базой данных.