在 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中文网其他相关文章!