在Golang 中捕獲訊號
在某些情況下,您可能需要在Golang 中實作一個進程包裝器來監視和捕獲由啟動的過程。進程包裝器應啟動進程並處理 SIGKILL 和 SIGTERM 等訊號。
啟動進程
要啟動進程,可以使用 syscall.Exec 函數。此函數允許您執行命令並重定向其輸入和輸出流。以下是範例:
func launchCmd(path string, args []string) { err := syscall.Exec(path, args, os.Environ()) if err != nil { panic(err) } }
擷取訊號
在 Go 中,您可以使用 signal 套件來擷取傳送到行程的訊號。 signal.Notify 函數可讓您註冊一個將接收指定訊號通知的通道。例如:
sigc := make(chan os.Signal, 1) signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) go func() { s := <-sigc // ... do something ... }()
在此代碼中,sigc 是將接收來自指定訊號類型的訊號的通道。您可以使用 select 語句來監聽該頻道上的訊號並執行對應的操作。
附加說明
以上是如何擷取和處理 Go 中已啟動進程的訊號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!