c语言如何直接强制退出程序,Go程序如何安全退出(CTRL+C)-Go语言中文社区
如果是命令行程序需要退出, CTRL+C是最直接的方法.
C语言如何处理CTRL+C
CTRL+C会向命令行进程发送中断信号, 在C语言的中的signal函数可以注册信号的处理函数.
signal函数的签名如下:
void (*signal(int sig, void (*func)(int)))(int);
比如, 我们要处理CTRL+C对应的SIGINT信号:
#include
#include
#include
void sigHandle(int sig) {
switch(sig) {
case SIGINT:
printf("sigHandle: %d, SIGINTn", sig);
break;
default:
printf("sigHandle: %d, OTHERn", sig);
break;
}
exit(1);
}
int main() {
signal(SIGINT, sigHandle);
for(;;) {}
return 0;
}
编译并运行程序后会进入死循环, 按CTRL+C强制退出会看到以下的输出:
sigHandle: 2, SIGINT
当然, 直接从进程管理杀死程序就没办法收到信号的.
中除了signal函数, 还有一个raise函数用于生成信号:
int raise(int sig);
我们在sigHandle截获信号之后如果想重新恢复信号, 可以使用raise函数. 但是, 要注意不要导致无穷递归signal/raise调用.
Go语言如何处理CTRL+C
Go语言也有类似的函数signal.Notify(在os/signal包中), 可以过滤信号.
这是signal.Notify自带的例子:
// Set up channel on which to send signal notifications.
// We must use a buffered channel or risk missing the signal
// if we're not ready to receive when the signal is sent.
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)
// Block until a signal is received.
s :=
fmt.Println("Got signal:", s)
signal.Notify会将用户关注的信号转发到信道c, 信道c不能是阻塞的. 如果信道是缓冲不足的话, 可能会丢失信号. 如果我们不再次转发信号, 设置为1个缓冲大小就可以了.
signal.Notify从第二个参数起是可变参数的, 用于指定要过滤的信号.
如果不指定第二个参数, 则默认是过滤全部的信号.
信号的定义一般在syscall. syscall包是系统相关的,
不同的操作系统信号可能有差异. 不过syscall.SIGINT和syscall.SIGKILL各个系统是一致的, 分别对应os.Interrupt和os.Kill.
下面是Go语言版完整的例子:
package main
import (
"fmt"
"os"
"os/signal"
)
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)
s :=
fmt.Println("Got signal:", s)
}
go run signal.go运行后会进入死循环, 按CTRL+C强制退出会看到以下的输出:
Got signal: interrupt
当然, 直接从进程管理杀死程序就没办法收到信号的.
如果要恢复信号, 调用s.Signal(). 如果要停止信号的过滤, 调用signal.Stop(c).
c语言如何直接强制退出程序,Go程序如何安全退出(CTRL+C)-Go语言中文社区相关推荐
- java 线程强制退出程序_Java程序在线程完成之前退出。我如何让Cucumber-JVM等待线程退出?...
然后,一个线程应该做一些事情,而最初的主线程继续贯穿黄瓜步骤. 程序不应该退出,直到所有线程都完成. 我遇到的问题是主程序在线程完成之前退出. 这里发生的事情: 输出/问题 主程序是RunApiTes ...
- 易语言 vb c 那个写的程序运行快,VB好还是易语言
满意答案 Zack_gb 2014.07.10 采纳率:53% 等级:8 已帮助:413人 其实编程语言都差不多的.易语言显得更简单些.易语言与VB一样是事件驱动的语言.我们在写代码时显得比C\ ...
- 扁平化c语言教程,中国象棋人机博弈程序(扁平化棋局) C语言实现
平台是Visual studio 2013 windows8.1 64位 先来一个效果图吧,原先是挺清晰的,但是200K以上不能上传,所以搞模糊了,这个界面是扁平风格的,个人感觉不错,很佩服作者,我 ...
- 用c语言编写实心菱形,C语言编写内置菱形的程序
C语言编写内置菱形的程序 最近迷上了用C语言编写图形的输出程序,有矩形的.三角形.等腰三角形,平行四边形.菱形.沙漏形.今天尝试着将菱形内置到矩形中,结果成功了,下面将快乐分享给大家,也希望广大C程序 ...
- 使用Go语言交叉编译开发嵌入式Linux应用程序
文章目录 目的 基础说明 编译生成嵌入式Linux应用程序 二进制文件瘦身 与C语言混合进行开发 总结 目的 Go语言非常适合用来开发存储空间不紧张的嵌入式Linux设备应用程序,可以在性能需求和开发 ...
- c语言 强制退出程序,C#实现点击按钮退出应用程序实例
最近在做一个程序,要求先登陆后再进入界面.因此,若是用户取消登陆,则要退出应用程序. 注意,用于重新设计了登陆界面,FormBorderStyle设置的为None,因此窗体右上角并没有关闭的按钮,按照 ...
- mac 强制退出程序_强行退出Mac上应用程序的6 种方法
虽然Mac os系统很流畅,但是我们在使用的时候偶尔会出现一些软件与系统不兼容情况.或者一些不良应用在我们使用的时候突然就卡主了,这时我们要么等应用恢复响应,或者干脆强制退出它,小编这里为你介绍6种快 ...
- mac 强制退出程序_Mac OS系统如何强制退出应用程序
Mac OS系统虽然非常稳定,但有时候也会受到不良APP影响,或者软件与系统不兼容等等,难免会遇到程序卡住,就需要强制退出这个程序了,下面是Mac OS里强制退出应用程序的六种方法. 使用键盘快捷键强 ...
- python语言的特点强制可读_python程序语言设计第二讲(笔记)
Python语言程序设计第二讲 1.复习回顾 1.1保留字 1.2温度转换 #宋宇婕宝贝开始编写的第一个程序,温度转换,我来了 TempStr=input("一阵给老子输入带有符号的温度值, ...
最新文章
- 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4小结
- 记于2014-12-9
- python语音在线编辑-Python实时语音识别控制
- weex前端式写法解决方案---eros
- java ee基础知识_Java EE:基础知识
- 面试突击 | Redis 如何从海量数据中查询出某一个 Key?视频版
- python md5函数_python实现md5加密
- 卷积神经网络训练准确率突然下降_基于联邦学习和卷积神经网络的入侵检测方法...
- 无缓冲I/O与有缓冲I/O区别
- linux离线安装yum源
- oracle sql 正则表达式
- mtk平台sensor分析一:alsps框架下的光距感驱动流程
- Meta 开源首个 AI 语音翻译系统,闽南话和英语可以直接语音互译
- 【钉钉-场景化能力包】考勤统计
- 设置计算机屏幕保护程序,电脑屏保怎么设置?一键设置电脑屏幕保护方法
- 关于微信授权登录的用户取消-2的问题
- Gradle入门(五)——Gradle其它模块与Plugin插件详解
- JZOJ5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
- 女人也真不容易(续)——37度男人
- 计算成绩平均分浮点数c语言,C实验四