信号实际上是一种软中断,如ARM的SWI指令可以产生软中断。
信号的料基本上就这么多,再提炼总结一下就是以下几点:
- signal函数和sigaction函数的对比,结论:后者传递信号的同时可以传递数据
- 可靠信号与不可靠信号的对比,结论:前者linux内核会维护一个队列,存储所有未达的可靠信号,后者没有队列,因此易造次信号丢失
- 信号的传递过程,内核会先检查信号阻塞状态字block,如果状态字该bit为1,linux内核则不会继续传递该信号
- pending状态字,即信号未决状态字,只要该信号被阻塞,pending状态字的对应bit位就会被置为1,可以通过检查该状态字,查看哪些信号被阻塞,通过对其的介绍可以知道,该状态字是由内核进行维护,应用程序是不可写可读的
kill -l 可以查看所有的信号,signal的默认动作和含义在man 7 signal
画框的信号应该要知道:
2 | SIGINT | ctrl+c退出 |
3 | SIGQUIT | ctrl+\退出 |
6 | SIGABRT | abort()系统调用 |
9 | SIGKILL | 停止进程(此信号不能被忽略或捕获) |
10 | SIGUSR1 | 用户定义信号1 |
12 | SIGUSR2 | 用户定义信号2 |
13 | SIGPIPE | 向没有读者的管道写入数据,默认动作为退出进程,很重要 |
14 | SIGALRM | 警告信号 |
17 | SIGCHLD | 子进程已经停止或退出 |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!