当前位置: 首页 > Linux

golang(os-signal)阅读

时间:2023-04-06 05:17:30 Linux

golang(os/signal)阅读信号和信号函数在类unix系统中,我们经常会用到信号和信号处理函数。在linux编程中,我们经常要处理程序接收到的函数。例如:signal(SIGINT,SignalHandler)上面的函数注册了SIGINT的信号处理函数SignalHandler。程序运行时,当接收到SIGINT信号时,程序相应地执行SignalHandler函数。信号分类特殊信号SIGKILL和SIGSTOP不能被程序修改。SIGKILLKillaprogramSIGSTOPPauseaprogram//Runaprogramfor{time.Sleep(1*time.Second)}//程序死循环//使用SIGINT退出^Csignal:interrupt//程序退出//忽略SIGINT、SIGSTOP和SIGKILLsignal.Ignore(syscall.SIGKILL,syscall.SIGINT,syscall.SIGSTOP)//SIGINT^C//SIGSTOP[3]+25295挂起运行非捕获信号.go//SIGKILLmchen2541325295006:04pts/500:00:00[non-caught-sign]Syncsignal同步信号是在程序执行期间被错误触发的信号。SIGBUS表示指针对应的地址是有效地址,但是总线不能正常使用指针。通常是由未对齐的数据访问引起的。SIGFPE是在执行错误的算术运算时发送给进程的信号。SIGSEGV表示指针对应的地址是无效地址,没有该地址对应的物理内存。注意:当go程序遇到这样的信号时,go程序会进入panic。异步信号内核或其他程序发送给本程序的信号就是异步信号。几个信号示例:SIGHUPProgramlostterminalSIGINT在程序执行期间,交互式终端按下CTRL+CSIGQUIT在程序执行期间,交换终端键盘按下CTRL+/go信号的语言处理go信号的默认行为同步信号导致panicSIGHUP,SIGINT,SIGTERM的程序退出SIGQUIT,SIGILL,SIGTRAP,SIGABRT,SIGSTEFLT,SIGSYS程序退出,转储堆栈信息SIGTSTP,SIGTTIN,SIGTTOU获取系统默认行为SIGPROF性能测试使用改变信号的默认处理函数funcIgnore(sig...os.Signal)忽略某些信号,相当于C函数signal(sig,SIG_IGN)funcIgnored(sigos.Signal)bool判断一个信号是否被欺骗funcNotify(cchan<-,sig...os.Signal)接收到并发送到channelcc的信号必须有足够的buffer来存储信号,即bufferchannel是处理一个信号的c,可以设置buffer为1,可以多次调用notify设置多个频道,并接收相同的信号。清除通知并使用停止

猜你喜欢