多线程中信号处理

0x00

​ 根据man 2 signal描述,signal()在多线程中的行为是未定义的,在多线程中不应该使用,而应该使用sigwait。前者对信号的处理是异步的,后者是同步的。为什么这么做呢?因为已经用上多线程了,再用异步就很难处理了。而且如果是signal的话,由哪个线程来执行信号处理函数又不明确。

​ 根据man 7 signal知,信号有的是针对进程的,比如常见的SIGINT SIGQUIT SIGARAM等,也有的针对线程的,只有指定线程能收到,比如SIGSEGV PTHREAD_KILL

​ 之前章节中,书里有一句话 sleep = pause+ signal+alarm,多线程中就不等同了,要定时还是老实sleep和usleep吧 ,多线程中等同的是 alarm+sigwait()