溫馨提示×

golang進程信號怎么處理

小億
126
2023-10-26 20:22:24
欄目: 編程語言

在Go語言中,可以使用os/signal包來處理進程信號。下面是一個處理 SIGINTSIGTERM 信號的示例代碼:

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函數監聽SIGINTSIGTERM信號,并將它們發送到sigCh通道中。接下來,我們開啟一個單獨的Goroutine來等待信號,一旦接收到信號,就執行相應的操作(如打印接收到的信號、執行清理操作等),然后調用os.Exit(0)退出程序。最后,我們使用select {}來阻塞主Goroutine,使程序保持運行狀態,直到接收到信號。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女