「遅延」を使用した信号処理とクリーンアップ
プログラミングでは、多くの場合、信号を中断するときにクリーンアップまたはエラー処理アクションを実行することが望ましいです。実行中のプロセス (ユーザーが 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 シグナルの受信時に実行される処理は、プログラムの特定のニーズによって異なります。この柔軟性により、「defer」を使用した信号処理とクリーンアップが、コード内の予期しない中断を管理するための多用途かつ効果的な手法になります。
以上がGo の SIGINT シグナルでクリーンなプログラムを確実に終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。