在 linux 上的线程中中断系统调用

Tim*_*mmm 3 linux signals pthreads interrupt system-calls

我有一个循环运行的 pthread,accept()以阻塞方式调用。有什么办法可以中断来自另一个线程的调用吗?一切都指向向线程发送信号,但显然您只能向进程发送信号。

我不能只是杀死线程,因为它会使套接字保持打开状态。反正那不是很干净。真的没有办法做到这一点吗?

cni*_*tar 7

您可以使用pthread_kill(3).

pthread_kill()函数将信号 sig 发送到线程,该线程与调用者处于同一进程中。

如果安装了信号处理程序,则将在线程thread 中调用该处理程序。

请注意,您不必杀死线程;你可以发送一个简单地使accept失败的信号EINTR