为了回答你问题的第二部分,"信号处理人员应该做尽可能少的工作吗?" 答案是肯定的,因为有一组非常小的功能是"异步信号安全",因此能够从信号处理程序调用.异步信号安全性是一种增强的重入形式.如果foo()异步信号是安全的,那意味着foo()在信号处理程序内调用是安全的,即使foo()在信号被引发时已经执行了.
您可以通过查看signal(man 7 signal)的第7节手册页来获取异步信号安全功能的完整列表.直接或间接地在信号处理程序中调用除了其中一个之外的任何函数,将调用未定义的行为.
"将字节写入管道"方法是处理信号的好方法,不受异步信号安全功能的限制,特别是如果您的程序已经围绕select循环定向.