栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang程序如何优雅地退出

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang程序如何优雅地退出

简言

1. 程序退出时不应该是kill -9暴力地杀死程序

2. 监听系统信号,进程收到指定信号(TERM,INTR等信号)后,做完善后工作,再退出程序是常规做法

3. golang语言监听系统信号很简洁,寥寥几行代码就可以很优雅地处理系统信号

4. kill -9 pid 触发的SIGKILL信号无法被处理,因为进程已经被系统强制关闭了

示例

package main
import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
	"time"
)

func Logic() {
	for {
		time.Sleep(time.Second*2)
		fmt.Println("logic time=",time.Now().Unix())
	}
}
func main() {
	// 逻辑处理协程
	go Logic()

	// 监控两个信号
	// TERM信号(kill + 进程号 触发)
	// 中断信号(ctrl + c 触发)
	osc := make(chan os.Signal, 1)
	signal.Notify(osc,syscall.SIGTERM, syscall.SIGINT)
	s := <- osc
	fmt.Println("监听到退出信号,s=",s)

	// 退出前的清理操作
	// clean()

	fmt.Println("main程序退出")
}

效果及讲解1

启动进程(go run命令启动进程,几秒后,用ps命令找到该进程,使用kill +进程号来发信号)

触发kill命令时的操作

注意:我们发给的进程是 "/tmp/go-build625650565/b001/exe/main2"所属的进程

不是"go run main2.go"所属的进程,这个只是启动程序时的命令进程,不是我们真正的运行程序

 

效果及讲解2(启动进程几秒后,按下ctrl+c键即可触发SIGINTR信号)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号