Linux在多线程程序中处理特定线程上的信号

时间:2015-02-04 17:19:55

标签: c++ linux networking service

我有一个程序,我想接受并处理传入的TCP连接,直到它获得终止信号。还有其他线程正在进行数据处理,我没有完全控制权,但如果我希望程序退出,我可以干净地停止/中止。

while (true)
{
    select(...)?
    if (got-terminate-signal)
    {
        break;
    }
    else
    {
        ...do stuff with sockets based on select...
    }
}

2 个答案:

答案 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;)。