簡體   English   中英

Linux處理多線程程序中特定線程上的信號

[英]Linux handling a signal on a specific thread in a multi-threaded program

我有一個程序要接受並處理傳入的TCP連接,直到它收到終止信號。 還有其他線程在執行數據處理,我無法完全控制這些線程,但是如果我要退出程序,則可以干凈地停止/中止線程。

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

您的問題不是很清楚,但是我會刺探您的想法

信號就像中斷,捕獲它們的例程就像中斷服務例程(類比可能完美也可能不完美)。 您可能會注意到以下事實:信號發生在處理程序內,然后通過某種同步方法(例如信號量)向另一個線程發出信號。

快速進行Google搜索會打開與此主題相關的許多頁面。 這是一個

...問題是:如何在主程序中捕獲SIGTERM,但使該信號“聾”起來? 我猜

pthread_sigmask函數可用於允許/拒絕將特定信號傳遞到線程或從中傳遞到線程。 並非所有信號都可以這種方式被阻止,但是SIGTERM可以。 要構造所需的sigset_t對象,可以使用sigemptysetsigaddset函數。 您可以查看手冊頁或單擊此處: http : //cursuri.cs.pub.ro/~apc/2003/resources/pthreads/uguide/users-96.htm

請注意,此函數在“當前線程”上起作用,因此應首先將其稱為線程回調函數(而不是“在運行線程之前”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM