First, the example
scatter read
gatter write
signal 通常使用一个 32 位无符号整数( man 7 signal), 使用单 bit 表示,因此可以表示 32 个信号。signal() sigaction() 功能类似,更改信号 handler。signal() 每次处理完需要重新设置。
但是 signal() 在已经进入自定义信号处理函数时,但是重新设置之前,可能系统又发生了信号,会丢失。sigaction 更可靠的原因是,在信号处理中,被捕捉的信号会被屏蔽,并且不用每次重新设置处理函数。
signal 中断当前进程进入内核原理在于 do_signal() 函数: