• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-进程间的通信之信号类型

12小时前
204
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

信号分为可靠信号和不可靠信号(实时信号与非实时信号),主要区别在于信号的可靠性、排序和丢失情况。

Linux中标准信号(不可靠信号、非实时信号)的编号范围为1~31,这前面31个信号都有特殊的名字,有着相对应的特殊事件;Linux的信号机制是从UNIX系统中继承过来的,但是早期UNIX 系统中的信号机制比较简单和原始,后来逐渐暴露出来了一些问题,这些不可靠信号不支持排队(处理信号的时候又来了新的信号),可能会造成信号丢失;

定义于POSIX.1b中的实时信号(信号值为34~64的信号),用于弥补对标准信号的诸多限制;可靠信号并没有对应的名字,而是使用了SIGRTMIN+X和SIGRTMAX-X的方式来表示;可靠信号相对于不可靠信号有许多的优势:

⚫之前标准信号中可以让应用使用的信号只有两个,SIGUSR1和SIGUSR2,可靠信号扩大了用户应用程序自定义的范围;

⚫标准信号是非实时(不可靠)信号的原因是因为不排队,如果给进程发送多个相同的标准信号,信号也只传递一次,导致信号丢失;实时信号采用队列化管理,如果给一个进程发多个相同的实时信号,就会多次传递信号;要是多个实时信号处于等待状态,率先传递具有最小编号的信号(即信号编号越小,信号优先级越高),如果是同一类型的多个信号排队,那么信号的传递顺序和信号发送的顺序保持一致;并且发送实时信号的时候,还可以给信号指定伴随数据,给接收进程的信号处理器

对于Linux中的标准信号,归纳相关表格用来查阅

默认处理列显示了信号的默认行为;core表示进程产生核心转储文件并退出;term表示信号终止进程;ignore表示忽略该信号;stop表示信号停止了进程;cont表示信号恢复一个停止的进程;

信号值 名称 描述 默认处理
1 SIGHUP 控制终端关闭 term
2 SIGINT 终止进程,一般是用户输入(CTRL+C)时发出 term
3 SIGQUIT 终端退出 core
4 SIGILL 检测到非法指令,如造成堆栈溢出时产生 core
5 SIGTRAP 跟踪/断电陷阱,由断点指令或其它trap指令产生 core
6 SIGABRT 异常终止,调用系统函数 abort()时产生。 core
7 SIGBUS 内存访问错误 core
8 SIGFPE 算术异常,出现致命算术错误时产生 core
9 SIGKILL 终止信号,该信号不能被阻塞、处理和忽略。 term
10 SIGUSR1 用户自定义信号 term
11 SIGSEGV 无效的内存引用 term
12 SIGUSR2 用户自定义信号 term
13 SIGPIPE 管道断开 term
14 SIGALRM 实时定时器过期 term
15 SIGTERM 终止进程,该信号可以被阻塞和处理 term
16 SIGSTKFLT 协处理器栈错误,Linux中该信号已经废弃 term
17 SIGCHLD 终止或停止子进程 ignore
18 SIGCONT 让处于进程停止状态的进程继续执行 cont
19 SIGSTOP 系统停止信号,停止进程,只是停止,进程未结束 stop
20 SIGTSTP 控制终端发起的停止信号,用于停止进程 stop
21 SIGTTIN 后台进程组向终端读取 stop
22 SIGTTOU 后台进程组向终端写 stop
23 SIGURG 套接字上产生紧急数据 ignore
24 SIGXCPU CPU占用时间超出限制 core
25 SIGXFSZ 文件大小超出限制 core
26 SIGVTALRM 虚拟定时器过期 term
27 SIGPROF 类似于SIGALRM,但包含CPU及系统调用时间 term
28 SIGWINCH 终端窗口尺寸发生变化 ignore
29 SIGIO 文件描述符就绪,可以产生I/O term
30 SIGPWR 上电启动失败 term
31 SIGSYS 非法的系统调用 core

相关推荐