列出信号

发送信号

kill -SIGKILL PID

信号处理

  • 通过kill命令给正在运行的程序发送信号
  • 不处理的话,程序会panic处理

Signal handler可以通过signal()系统调用进行设置。如果没有设置,缺省的handler会被调用,当然进程也可以设置忽略此信号。
有两种信号不能被拦截和处理:SIGKILLSIGSTOP

当接收到信号时,进程会根据信号的响应动作执行相应的操作,信号的响应动作有以下几种:

  • 中止进程(Term)
  • 忽略信号(Ign)
  • 中止进程并保存内存信息(Core)
  • 停止进程(Stop)
  • 继续运行进程(Cont)

用户可以通过signalsigaction函数修改信号的响应动作(也就是常说的“注册信号”)。另外,在多线程中,各线程的信号响应动作都是相同的,不能对某个线程设置独立的响应动作。

信号介绍

  • Ctrl-C 发送 INT signal (SIGINT),通常导致进程结束
  • Ctrl-Z 发送 TSTP signal (SIGTSTP); 通常导致进程挂起(suspend)
  • Ctrl-\ 发送 QUIT signal (SIGQUIT); 通常导致进程结束 和 dump core.
  • Ctrl-T (不是所有的UNIX都支持) 发送INFO signal (SIGINFO); 导致操作系统显示此运行命令的信息

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

在POSIX.1-1990标准中定义的信号列表

信号处理

package mainimport "fmt"
import "os"
import "os/signal"
import "syscall"func main() {// Go信号通知通过向一个channel发送``os.Signal`来实现。// 我们将创建一个channel来接受这些通知,同时我们还用// 一个channel来在程序可以退出的时候通知我们sigs := make(chan os.Signal, 1)done := make(chan bool, 1)// `signal.Notify`在给定的channel上面注册该channel// 可以接受的信号signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)// 这个goroutine阻塞等待信号的到来,当信号到来的时候,// 输出该信号,然后通知程序可以结束了go func() {sig := <-sigsfmt.Println()fmt.Println(sig)done <- true}()// 程序将等待接受信号,然后退出fmt.Println("awaiting signal")<-donefmt.Println("exiting")
}

当运行程序的时候,程序将阻塞等待信号的到来,我们可以使用CTRL+C来发送一个SIGINT信号,这样程序就会输出interrupt后退出。

awaiting signalinterrupt
exiting

golang中的信号相关推荐

  1. golang中os/signal包的使用

    golang中os/signal包的使用 os/signal包实现对信号的处理 golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号:一个是 s ...

  2. Golang中的自动伸缩和自防御设计

    Raygun服务由许多活动组件构成,每个组件用于特定的任务.其中一个模块是用Golang编写的,负责对iOS崩溃报告进行处理.简而言之,它接受本机iOS崩溃报告,查找相关的dSYM文件,并生成开发者可 ...

  3. Linux Signal及Golang中的信号处理

    转载地址:https://colobu.com/2015/10/09/Linux-Signals/ 信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方 ...

  4. Golang中panic与recover的实现原理

    今天我们讲讲golang中panic异常,以及recover对异常的捕获,由于panic.recover.defer之间非常亲密,所以今天就放在一起讲解,这里会涉及到一些defer的知识,有兴趣可以看 ...

  5. Golang 中的 Goroutine 调度原理与 Chanel 通信

    简介   在 Go 中,每一个并发的活动称为一个 Goroutine 或者 协程.当一个程序启动时,只有一个 Goroutine 来调用 main 函数,称之为 主Goroutine.新的 Gorou ...

  6. golang中的atomic,以及CAS操作

    CAS无锁算法 要实现无锁(lock-free)的非阻塞算法有多种实现方法,其中CAS(比较与交换,Compare and swap)是一种有名的无锁算法.CAS是CPU指令,在大多数处理器架构,包括 ...

  7. 【Golang】关于信号signal处理

    我们在生产环境下运行的系统要求优雅退出,即程序接收退出通知后,会有机会先执行一段清理代码,将收尾工作做完后再真正退出.我们采用系统Signal来 通知系统退出,即kill pragram-pid.我们 ...

  8. linux内核定义的常用信号6,Linux中的信号

    在 Linux 中,理解信号的概念是非常重要的.这是因为,信号被用于通过 Linux 命令行所做的一些常见活动中.例如,每当你按 Ctrl+C 组合键来从命令行终结一个命令的执行,你就使用了信号.每当 ...

  9. Golang中Buffer高效拼接字符串以及自定义线程安全Buffer

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. Go中可以使用"+ ...

最新文章

  1. linux系统中指定端口连接数限制
  2. Spring boot排除依赖
  3. Winform中使用EasyPlayer-RTSP-Win开源组件实现播放RTSP视频流
  4. Elasticsearch 入门教程
  5. mysql if selected_初识MySQL
  6. .NET内存管理五大基础知识
  7. Apache ab 压力测试工具
  8. linux zookeeper 端口号,linux下zookeeper安装
  9. 计算机网络第五版思维导图大全集
  10. 使用深度森林(Deep Forest)进行分类-Python
  11. 每个设计师都应该了解的IOS编年史
  12. 腾讯云搭建Socks5多IP代理服务器实现游戏单窗口单IP完美搭建教程附带工具
  13. rs232与db9接线方式
  14. 大数据技术在银行业中的应用场景,主要有哪些?
  15. 腾讯电脑管家卸载后的残留信息有哪些
  16. H264 YUV420视频翻转
  17. M001: MongoDB Basics Chapter 3: Deeper Dive on the MongoDB Query Language学习记录
  18. 网络打印机提示的“功能地址0x造成了一个保护错误”问题解决方案
  19. Web安全防范-----防止重放攻击
  20. 黑马ssm学习笔记-企业权限管理系统

热门文章

  1. 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )
  2. 【Android 应用开发】Android 图表绘制 achartengine 示例解析
  3. 【网络安全】网络安全攻防 -- 黑客攻击简要流程
  4. 如何把VS Code的Language Server Protocol整合到Eclipse中来
  5. Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
  6. android中可以使用bitmap的平铺,镜像平铺等减小图片带来的apk过大的问题
  7. 鼠标位置精确定位总结
  8. 2014/3/16 长沙多校(第三次)
  9. EM 期望最大化算法
  10. 选择Data类型在Access与Sql中的区别