Go 进程のシグナル処理方法

Go言語では、os/signalパッケージを使用してプロセスのシグナルを処理できます。以下は、SIGINTとSIGTERMシグナルを処理するサンプルコードです。

package main

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

func main() {
	// 创建一个接收信号的通道
	sigCh := make(chan os.Signal, 1)
	// 监听 SIGINT 和 SIGTERM 信号
	signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)

	// 开启一个 Goroutine 来等待信号
	go func() {
		// 通过通道接收信号
		sig := <-sigCh
		// 打印接收到的信号
		fmt.Printf("Received signal: %s\n", sig)
		// 执行清理操作,然后退出程序
		// ...
		os.Exit(0)
	}()

	// 主程序继续执行其他操作
	// ...

	// 阻塞主 Goroutine,等待信号
	select {}
}

上のコード例では、まずシグナルを受け取るためのチャネル sigCh を作成し、signal.Notify 関数を使って SIGINT と SIGTERM シグナルをウォッチし、それらを sigCh チャネルに流します。次に、シグナルを待つための分離 Goroutine を開始し、シグナルを受信したら対応する処理(シグナルの表示、クリーンアップ処理の実行など)を実行して、最後には os.Exit(0) で処理を終了します。最後に、select {} でメイン Goroutine をブロックして、プログラムがシグナルを受け取るまで実行し続けます。

bannerAds