有一个守护进程有两个线程:th1,th2。th2 使用read(2)
.
如果我用 杀死守护进程SIGTERM
,th1 会捕获并处理信号(设置终止标志),然后调用守护进程析构函数,它会调用pthread_kill(th2, SIGTERM)
. 但是,第二个线程没有接收到SIGTERM
,所以它没有被杀死(当套接字接收到数据并从 中取出时read()
,它完成了执行,因为已经设置了终止标志)。
如果我调用pthread_kill(th2, SIGUSR2)
, 然后pthread_kill(th2, SIGTERM)
,一切都会正确完成。因此,UNIX 似乎因此不允许发送相同的信号。
这种行为是否取决于操作系统?我们能否确保指定线程SIGTERM
从另一个线程接收?