linux ctrl zstop信号,忽略所有信号导致的程序Ctrl+c和Ctrl+z无法退出问题,以及信号表详解...

首先,出现的问题:Ctrl+c和Ctrl+z甚至正常的杀程序,都无法让执行的程序退出

出现问题的原因

在程序中 调用CloseIOAndSignal函数时,将所有的信号全部执行忽略和关闭操作,因此,当按Ctrl+c和Ctrl+z时,程序无法正常关闭

至于到底什么原因 ,为什么教程里让关闭所有信号就没错,我关闭所有信号就有错,这个我没有搞清楚,还有信号机制仍然一知半解,这个慢慢再学习

解决办法:

用命令:kill -9 进程号

下面是所查资料

关于kill -9 和 普通kill 的详解

kill -9 和 kill 有什么区别

转自kill -9 和 kill 有什么区别

区别:

kill -9 id:

一般不加参数kill是使用15来杀,

这相当于正常停止进程,

停止进程的时候会释放进程所占用的资源;

他们的区别就好比电脑关机中的软关机

(通过“开始”菜单选择“关机”)与硬关机

(直接切断电源),虽然都能关机,

但是程序所作的处理是不一样的。

kill - 9 表示强制杀死该进程;而 kill 则有局限性,例如后台进程,守护进程等;

执行kill命令,

系统会发送一个SIGTERM信号给对应的程序。

SIGTERM多半是会被阻塞的。

kill -9命令,系统给对应程序发送的信号是SIGKILL,

即exit。exit信号不会被系统阻塞,

所以kill -9能顺利杀掉进程。

最后,转载别人博客上的信号表详解

转载自:

Linux常用信号列表

SIGNAL

几点比较重要的,我列举以下:

可以使用signal函数(移植性不好,功能简单)或者sigaction函数来改变信号抵达的处理动作。

信号的处理动作是进程属性,所以一个进程里的多个线程,信号的处理动作是相同的。

一些系统调用可以发送信号,例如:kill函数、pthread_kill函数、raise函数等等。

Linux下查看支持的信号列表

在这里插入图片描述

456b7038c64a2ae19da9d28743b37c0d.png

列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的)

编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。

不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。

信号简要说明

在这里插入图片描述在这里插入图片描述

b019544ce9fb54d98d35df3f008b788e.png

信号详细说明

SIGHUP (1) 本信号在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,通知同一session内的各个作业,这时它们与控制终端不再关联。

SIGINT (2) 程序终止(interrupt)信号,在用户键入INTR字符(通常是Ctrl + C)时发出。

SIGQUIT (3) 和SIGINT类似,但由QUIT字符(通常是Ctrl + )来控制。进程在因收到 SIGQUIT退出时会产生core文件,在这个意义上类似于一个程序错误信号。

SIGILL (4) 执行了非法指令。通常是因为可执行文件本身出现错误,或者试图执行数据段的堆栈溢出时也有可能产生这个信号。

SIGTRAP (5) 由断点指令或其它trap指令产生,由debugger使用。

SIGABRT (6) 程序自己发现错误并调用abort时产生。

SIGIOT (6) 在PDP-11上由iot指令产生,在其它机器上和SIGABRT一样。

SIGBUS (7) 非法地址,包括内存地址对齐(alignment)出错。举例:访问一个四个字长的整数,但其地址不是4的倍数。

SIGFPE (8) 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误。

SIGKILL (9) 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。

SIGUSR1 (10) 留给用户使用。

SIGSEGV (11) 段错误,试图访问未分配给自己的内存,或试图往没有写权限的内存地址写数据。

SIGUSR2 (12) 留给用户使用。

SIGPIPE (13) Broken pipe。

SIGALRM (14) 时钟定时信号,计算的是实际的时间或时钟时间。alarm函数使用该信号。

SIGTERM (15) 程序结束(terminate)信号。与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常(优雅地)退出。shell命令kill缺省产生这个信号。

SIGCHLD (17) 子进程结束时,父进程会收到这个信号。

SIGCONT (18) 让一个停止(stopped)的进程继续执行。本信号不能被阻塞。可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作。例如:重新显示提示符。

SIGSTOP (19) 停止(stopped)进程的执行。注意它和terminate以及interrupt的区别:该进程还未结束,只是暂停执行。本信号不能被阻塞、处理或忽略。

SIGTSTP (20) 停止进程的运行,但该信号可以被处理和忽略。用户键入SUSP字符时 (通常是Ctrl + Z)发出这个信号。

SIGTTIN (21) 当后台作业要从用户终端读数据时,该作业中的所有进程会收到SIGTTIN 信号。缺省时这些进程会停止执行。

22.SIGTTOU (22) 类似于SIGTTIN,但在写终端(或修改终端模式)时收到。

SIGURG (23) 有“紧急“数据或out-of-band数据到达socket时产生。

SIGXCPU (24) 超过CPU时间资源限制。这个限制可以由getrlimit/setrlimit来读取或者改变。

SIGXFSZ (25) 超过文件大小资源限制。

SIGVTALRM (26) 虚拟时钟信号。类似于SIGALRM,但是计算的是该进程占用的CPU时间。

SIGPROF (27) 类似于SIGALRM/SIGVTALRM,但包括该进程用的CPU时间以及系统调用的时间。

SIGWINCH (28) 窗口大小改变时发出。

SIGIO (29) 文件描述符准备就绪,可以开始进行输入/输出操作。

SIGPWR (30) Power failure。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值