[英]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對象,可以使用sigemptyset和sigaddset函數。 您可以查看手冊頁或單擊此處: http : //cursuri.cs.pub.ro/~apc/2003/resources/pthreads/uguide/users-96.htm
請注意,此函數在“當前線程”上起作用,因此應首先將其稱為線程回調函數(而不是“在運行線程之前”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.