>백엔드 개발 >Golang >Go에서 SIGINT 신호에 대한 클린 프로그램 종료를 어떻게 '지연'할 수 있습니까?

Go에서 SIGINT 신호에 대한 클린 프로그램 종료를 어떻게 '지연'할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-25 01:20:09192검색

How Can

"Defer"를 사용한 신호 처리 및 정리

프로그래밍에서는 신호를 중단할 때 정리 또는 오류 처리 작업을 수행하는 것이 바람직한 경우가 많습니다. 예를 들어 사용자가 Ctrl C(SIGINT)를 눌러 프로그램을 종료하는 경우와 같이 실행 중인 프로세스입니다. "defer" 키워드는 프로그램이 종료되기 전에 그러한 작업이 실행되도록 하는 편리한 방법을 제공합니다.

SIGINT 신호 캡처

SIGINT 신호를 캡처하려면 수신 처리 기능을 제공하는 os/signal 패키지를 사용할 수 있습니다. 신호.

package main

import (
    "fmt"
    "os"
    "os/signal"
)

// main function
func main() {
    gracefulExit()
}

// Listen for and handle Ctrl+C (SIGINT) signal
func gracefulExit() {
    // Create a channel to receive signals on
    sigs := make(chan os.Signal, 1)
    
    // Register SIGINT (Ctrl+C) signal handler
    signal.Notify(sigs, os.Interrupt)

    // Start a goroutine to listen for signals
    go func() {
        sig := <-sigs
        fmt.Printf("Received %v signal. Cleaning up and exiting...\n", sig)
        
        // Trigger cleanup actions using "defer"
        defer cleanup()
        defer saveResults()
        
        os.Exit(0)
    }()
    
    // Start running the program's main logic
    runProgram()
}

지연 작업 실행

신호 처리 고루틴 내에서 프로그램을 종료하기 전에 defer 키워드를 사용하여 정리 작업을 정의할 수 있습니다. 선언의 역순으로 실행됩니다. 위의 예에서 cleanup() 및 saveResults() 함수는 프로그램이 종료되기 전에 호출됩니다.

정리 동작 사용자 정의

필요한 실제 정리 작업 SIGINT 신호가 수신될 때 수행되는 작업은 프로그램의 특정 요구 사항에 따라 달라집니다. 이러한 유연성 덕분에 "지연"을 사용한 신호 처리 및 정리가 코드의 예상치 못한 중단을 관리하기 위한 다재다능하고 효과적인 기술이 됩니다.

위 내용은 Go에서 SIGINT 신호에 대한 클린 프로그램 종료를 어떻게 '지연'할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.