信号实际上是一种软中断,如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 协议 ,转载请注明出处!

socket应用编程(1) 上一篇
进程 下一篇