Go如何监听Linux系统信号

2021/7/1 7:21:09

本文主要是介绍Go如何监听Linux系统信号,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、什么系统信号?

详细信息请查阅:https://www.cnblogs.com/senior-engineer/p/5979992.html

二、使用go代码去监听

  • 交叉编译 (在cmd里面设置)
    • 想在Linux上运行
      • set GOOS=linux (go GOOS=windows )
      • go build ,然后得到个二进制程序
package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
)

func main() {

	// 获取pid
	fmt.Println("pid: ", os.Getpid())

	// 管道
	interrupt := make(chan os.Signal, 1)
	reload := make(chan os.Signal, 1)

	// 监听系统信号,一般只监听 SIGINT(中断信息相当于Ctrl + c) SIGHUP 这2种信号
	signal.Notify(interrupt, syscall.SIGINT)
	signal.Notify(reload, syscall.SIGHUP)

	// 等待信号,读取管道
INTERRUPT:
	for {
		select {
		case <-interrupt:
			break INTERRUPT
		case <-reload:
			fmt.Println("raload")
		}
	}
}

三、Linux上运行

3.1、运行

[root@prometheus test]# ll
total 1768
-rwxr-xr-x 1 root root 1807789 Jul  1 02:07 signal
[root@prometheus test]# ./signal 
pid:  23988

3.2、测试

# 1、确定成功运行
[root@prometheus ~]# ps -ef| grep signal
root      23988  23907  0 02:19 pts/0    00:00:00 ./signal
root      23996  23950  0 02:19 pts/1    00:00:00 grep --color=auto signal

# 2、发送一个SIGHUP信号给signal,控制台打印reload则表示成功
[root@prometheus ~]# kill -SIGHUP 23988

# 3、查看
[root@prometheus test]# ./signal 
pid:  23988
raload
# 4、 按键盘Ctrl + c。则是给一个SIGINT信号。就退出进程
[root@prometheus test]# ./signal 
pid:  23988
raload
^[root@prometheus test]# 


这篇关于Go如何监听Linux系统信号的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程