Go中的系统Signal处理

package main

import "fmt"
import "os"
import "os/signal"
import "syscall"

func main() {
	go SignalProc()

	done := make(chan bool, 1)
	for {
		select {
		case <-done:
			break
		}

	}
	fmt.Println("exit")

}

func SignalProc() {
	sigs := make(chan os.Signal)
	signal.Notify(sigs, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGHUP, os.Interrupt)

	for {
		msg := <-sigs
		fmt.Println("Recevied signal:", msg)

		switch msg {
		default:
			fmt.Println("get sig=%v\n", msg)
		case syscall.SIGHUP:
			fmt.Println("get sighup\n")
		case syscall.SIGUSR1:
			fmt.Println("SIGUSR1 test")
		case syscall.SIGUSR2:
			fmt.Println("SIGUSR2 test")
		}
	}
}

  

// kill  -USR1 10323

kill  -USR2 10323

kill -n 2 10323

可以 SIGUSR1 做一些配置的重新加载

SIGUSR2 可以做一些游戏base的重新加载

捕获ctrl + c信号

 signal.Notify(c, os.Interrupt)
 

指令: kill -Num ProcessId(pid)

信號簡稱 數值 代表意義
HUP 1 控制中的終端/程序中斷
INT 2 鍵盤的插入指令(同 Ctrl + C)
QUIT 3 鍵盤的中斷指令(同 Ctrl + \)
TERM 15 程序的終止指令
KILL 9 程序的強制終止指令(暴力砍掉)
CONT 18 程序的再啟動指令(STOP(19) 後再重新啟動)
STOP 19 程序的停止指令(同 Ctrl + Z)

一般如果關機的話, 系統是會先送 TERM(15) 的訊號來終止 process, 不行才會送 KILL(9) 來終止程式.

转自:http://sugarmanman.blog.163.com/blog/static/8107908020136713147504/

时间: 2024-10-24 22:11:37

Go中的系统Signal处理的相关文章

uboot中raise:Signal #8 caught的根本原因

在移植uboot时编译一切正常,但uboot启动中加载自己写的网卡驱动出现问题,一直在打印raise:Signal #8 caught google  百度了一番,也有很多人遇到了这个问题,大家都说出了解决问题的办法, 就是自己编写的驱动中有出现除以0的误操作,就会一直打印raise:Signal #8 caught 将除操作改为位移操作,或者避免除数为0,就可以解决这个问题. 那为什么有除以0的操作就会引发raise: Signal #8 caught ? 来分析一番! 遇到错误打印,首先要找

C/C++中避免系统的字节对齐

在定义了一个新的Struct后. 系统会按照一定的规则将新生命的类型变量进行字节对齐,如下结构体: typedef struct Test{ int a; char b[6]; }Test; 该结构体类型可能会被对齐为12个字节. 那么,在内存流和文件流操作中可能会出现这样的用法: fwrite(strPtr,1,sizeof(Test)*len,fp); 事实上,被写入了len*12个字节,因为sizeof(Test)实际上不等于10,而是12. 那么,如下简单地操作可以避免在流操作中出现的一

java中获取系统属性以及环境变量

java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户定义的信息传递给 Java 进程.环境变量产生很多其它的全局效应,由于它们不仅对Java 子进程可见,并且对于定义它们的进程的全部子进程都是可见的.在不同的操作系统上,它们的语义有细微的区别,比方,不区分大写和小写.由于这些原因,环境变量更可能有意料不到的副作用.最好在可能的地方使用系统属性.环境变

android中调用系统的发送短信、发送邮件、打电话功能

1 调用发送短信功能: Uri smsToUri = Uri.parse("smsto:"); Intent sendIntent = new Intent(Intent.ACTION_VIEW, smsToUri); sendIntent.putExtra("address", "123456"); //电话号码,这行去掉的话,默认就没有电话 sendIntent.putExtra("sms_body","短信内容

VMware中安装系统提示没有可用的映像(No image available)

今天新建了个虚机在装系统的时候提示"没有可用的映像" 之所以会出现这种情况是因为在新建虚机的时候选择的设置不同导致的,此处不管选第一项还是第二项都会虚机设置中多了一个软盘的配置项,而这个选项默认的勾选就是导致上面没有可用镜像的真正元凶. 网上一查这个问题很多都说是开始迅速按F2或者ESC进BIOS修改默认启动顺序,但即使你这么设置了但依旧是无济于事的,所以要解决这个问题即在设置中把软盘那项的设备状态里的启动时连接的勾去掉即可. 当然最好的方法是别在新建虚机向导中指定安装来源,选择第三项

JAVA中获取系统时间

一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowString {public static void main(String[] args) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式System.out.println(df.forma

嵌入式软件开发中linux系统的选择

就自己使用过了几个linux版本来发表下自己的看法 在公司不上直接上网的情况下 市面上很多的linux发行版本就不能用了 要在能提供完整镜像iso的版本中进行选择 一般就只能选择 fedora centos debian fedora centos 要使用iso镜像当软件源要更改yum配置 debian 的话安装就默认是iso文件当镜像 同时debian 有3个iso文件下载,第一个是系统和一些常用软件 后两个就是些软件,你把这三个iso下载下来有12G左右,想要什么软件都会有了 根本就不再需要

Cocos2d-x 3.x 在wp8中调用系统字体的解决方案

问题和解决方法: 在使用cocos2d-x设计游戏的时候,字体是个很重要的部分.如果游戏中对字体没有太多的要求,就可以使用平台系统自带的字体,可以节省游戏的尺寸,以及减小游戏运行时所占用的内存.当加载系统字体的时候,wp8平台下就出现了问题. wp8平台下的系统自带的中文字体有一个叫等线字体的字体库,DengXian.ttf.我们想在代码中使用这个系统字体,比如创建一个标签: auto label=Label::create("这是简体中文","DengXian",

windows上通过vnc连接虚拟机中linux系统

首先要在虚拟机中安装vnc. 虚拟机的设置中要启用VNC连接. 然后输入指令 vncserver,可以看到有一个序号. 接着在windows下打开vnc软件 这边输入IP,试了很多次都显示the connection was refused by the host computer.无法连接. 此时在IP后面加了端口号,端口号为上图中设置的5900,依然无法连接 正确的写法是IP加端口号,但是这边的端口号不是设置的5900,而是在5900基础上加上虚拟机中的VNC序号,如第一张图中显示的1.正确