"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!