我有一个程序,我想接受并处理传入的TCP连接,直到它获得终止信号。还有其他线程正在进行数据处理,我没有完全控制权,但如果我希望程序退出,我可以干净地停止/中止。
while (true)
{
select(...)?
if (got-terminate-signal)
{
break;
}
else
{
...do stuff with sockets based on select...
}
}
答案 0 :(得分:1)
你的问题不是很清楚,但是我会把我所认为的内容刺入其中。
信号就像中断一样,捕获它们的例程就像中断服务程序(类比可能是也可能不完美)。您可能会注意到信号发生在处理程序中,然后通过某种同步方法(例如,信号量)发出另一个线程的信号。
快速进行Google搜索可以查看有关该主题的许多页面。 Here's one.
答案 1 :(得分:1)
......问题是:如何在主程序中捕获SIGTERM,但是创建线程" deaf"那个信号? 我想。
pthread_sigmask 函数可用于允许/拒绝特定信号传递给线程。并非所有信号都可以通过这种方式阻止,但SIGTERM可以。要构造所需的sigset_t对象,可以使用 sigemptyset 和 sigaddset 函数。您可以查看联机帮助页或点击此处:http://cursuri.cs.pub.ro/~apc/2003/resources/pthreads/uguide/users-96.htm
请注意,此功能适用于"当前线程"因此它应该被称为线程回调函数的第一件事(不是"在运行线程之前#34;)。