简言

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 := <- oscfmt.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信号)

golang程序如何优雅地退出相关推荐

  1. Golang信号处理和优雅退出守护进程

    Golang中的信号处理 信号类型 个平台的信号定义或许有些不同.下面列出了POSIX中定义的信号. Linux 使用34-64信号用作实时系统中. 命令 man signal 提供了官方的信号介绍. ...

  2. 如何优雅地退出python程序

    如何优雅地退出python程序 一个单模的Python程序,启动之后要能够优雅地关闭.即当用户按Ctrl+C或者kill pid的时候,程序都能从容关闭.实现起来非常简单. [python] view ...

  3. Linux系统下程序异常如何优雅的退出

    当我们想强制结束一个程序的时候,我们通常会给它发送一个信号然后该进程捕捉到信号,再然后该进程执行一定操作最终被终止.信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应 ...

  4. go 服务器如何优雅的退出、重启

    go 服务器优雅的退出 与 重启 简介 说明 优雅的退出 完整测试代码 logger.go main.go route.go controller.go 简介 在服务器开发的时候,往往都会有一些关于服 ...

  5. 【golang程序包推荐分享】go-ini、viper、godoc

    [golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...

  6. linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数

    文章目录 1.显示执行脚本花费的时间 2.在脚本退出时杀死后台运行的程序 3.在脚本退出时跳出循环 4.读取命令行参数来决定循环次数 1.显示执行脚本花费的时间 网址:bash - How to ge ...

  7. 如何获取程序返回值,退出码,错误码

    在c/C++语言程序设计中,我们可能经常性的需要进行错误处理,异常处理等问题. 关于异常部分,主要就是C++异常了. 今天我们主要谈论c语言方面的一些问题:如何获取程序返回值,退出码,错误码. 1如何 ...

  8. window环境编译在linux环境运行的golang程序

    1.打开windows命令行界面进入项目根目录,执行如下命令: SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 2.编译golang程序,得到与目录 ...

  9. linux 程序随命令窗口退出一起退出

    前言 CentOS Linux release 8.2.2004 (Core) linux 程序随命令窗口退出一起退出 1, 用ssh登录服务器后,启动程序: shell> java -jar ...

最新文章

  1. R包dplyr进行数据清洗和整理
  2. plt.rcParams
  3. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
  4. 选项卡示例代码###
  5. 从mysql读取数据保存成excel_小程序读取excel表格数据,并存储到云数据库
  6. Java中代理的简明使用
  7. 机器学习 预测模型_基于机器学习模型的汽车价格预测(第2部分)
  8. 2019 年我是怎么熬过来的?
  9. html网页音乐手机播放,网页添加背景音乐代码,支持手机端的html5代码播放器
  10. 晕晕沉沉的一天,ISAPI_Rewrite 2.9破解版竟然是假的
  11. 【阿里开发规范】Java开发手册(嵩山版)
  12. 精简版Android ProtoBuf入门
  13. 中南林业科技大学的计算机研究生分数线,2020中南林业科技大学研究生分数线(以及历年复试)...
  14. Android 预制第三方app到系统中
  15. 怎么装python的keras库_Keras教程:用Python进行深度学习的终极入门指南
  16. ANSYS Workbench远端位移边界条件的解析
  17. TCGA 亚型突变负荷代码
  18. Win RT再遭宏碁唱衰 微软被迫调整策略
  19. Appium-desktop的下载安装
  20. 配置ODBC驱动连接DM8数据库

热门文章

  1. 为iptables开放新的网络端口
  2. UVA - 11846 Finding Seats Again (DFS搜索对象)
  3. 机器学习-机器学习简介
  4. arduino自带程序_arduino代码运行时间测试函数,代码性能运行时间测试方法
  5. 取石子游戏与SG函数
  6. 最短路径之Spfa算法
  7. WebSoket 的广泛应用
  8. Linux 内存管理 | 地址映射:分段、分页、段页
  9. 万字长文|深入理解XDP全景指南
  10. SpringBoot:切面AOP实现权限校验:实例演示与注解全解