在一些特殊操作的时候,比如中断或停止时,系统会向程序发送特定的信号,通过处理系统信号,可以实现程序的优雅退出和守护程序等功能

每个平台的信号定义可能有所不同,以下是 POSIX 中定义的信号,也是 Linux 所采用的信号定义

信号动作说明
SIGHUP1Term终端控制进程结束(终端连接断开)
SIGINT2Term用户发送INTR字符(Ctrl+C)触发
SIGQUIT3Core用户发送QUIT字符(Ctrl+/)触发
SIGILL4Core非法指令(程序错误、试图执行数据段、栈溢出等)
SIGABRT6Core调用abort函数触发
SIGFPE8Core算术运行错误(浮点运算错误、除数为零等)
SIGKILL9Term无条件结束程序(不能被捕获、阻塞或忽略)
SIGSEGV11Core无效内存引用(试图访问不属于自己的内存空间、对只读内存空间进行写操作)
SIGPIPE13Term消息管道损坏(FIFO/Socket通信时,管道未打开而进行写操作)
SIGALRM14Term时钟定时信号
SIGTERM15Term结束程序(可以被捕获、阻塞或忽略)
SIGUSR130,10,16Term用户保留
SIGUSR231,12,17Term用户保留
SIGCHLD20,17,18Ign子进程结束(由父进程接收)
SIGCONT19,18,25Cont继续执行已经停止的进程(不能被阻塞)
SIGSTOP17,19,23Stop停止进程(不能被捕获、阻塞或忽略)
SIGTSTP18,20,24Stop停止进程(可以被捕获、阻塞或忽略)
SIGTTIN21,21,26Stop后台程序从终端中读取数据时触发
SIGTTOU22,22,27Stop后台程序向终端中写数据时触发
  • 有的信号名有 3 个不同的信号值,这些信号值是和平台相关的。其中 alpha、sparc 对应第一个,i386、ppc、sh 对应第二个,mips 对应第三个
  • 对应的动作为默认动作,程序可以选择忽略,其中 Term 为终止进程,Ign 为忽略信号,Core 为终止进程同时输出 core dump,Stop 为停止进程
最后修改:2021 年 03 月 16 日
如果觉得我的文章对你有用,请随意赞赏