執行緒的訊號
執行緒的訊號與程序之間的關係
執行緒沒有自己獨立的訊號機制。
執行緒的訊號依賴與所在的程序。
執行緒有自己的「訊號遮蔽集合」,使得:
1)各執行緒可以向其同程序內的執行緒傳送訊號。(使用pthread_kill
2)各執行緒可以設定幾的「訊號遮蔽集合」,其初值從建立執行緒中繼承。
訊號遮蔽集合類似與程序的訊號遮蔽字,
但它只作用於該執行緒。
使用pthread_sigmask(類似於程序的sigprocmask函式)
3)各執行緒共享對某訊號的處理方法,
即收到訊號後,各執行緒執行相同的處理函式。
除非該訊號被該執行緒遮蔽。
注意:程序收到能夠「終止」該程序的訊號後,該程序裡的所有執行緒都將終止。
向執行緒傳送訊號
pthread_kill
原型:int pthread_kill (pthread_t thread, int sig);
引數:sig, 如果為0,則檢測對應的執行緒thread是否存在
設定執行緒的訊號遮蔽集合
pthread_sigmask
原型: int pthread_sigmask(int how,
const sigset_t *restrict set,
sigset_t *restrict oset);
注意:用法和sigprocmask相似。
注意:sigkill和sigstop,對程序和執行緒都不能遮蔽。
#include
#include
#include
#include
void sigusr_handle (int arg)
void * th1_handle(void *arg)
}void * th2_handle(void *arg)
}int main(void)
ret = pthread_create(&mythread2, null, th2_handle, null);
if (ret != 0)
sleep(3);
ret = pthread_kill(mythread1, sigusr1);
if (ret != 0)
ret = pthread_kill(mythread1, sigusr2);
if (ret != 0)
ret = pthread_kill(mythread2, sigusr1);
if (ret != 0)
sleep(1);
ret = pthread_kill(mythread2, sigusr2);
if (ret != 0)
ret = pthread_kill(mythread1, sigkill);
if (ret != 0)
pthread_join(mythread1, null);
pthread_join(mythread2, null);
printf("main thread end!\n");
return
0;
}
Linux pthread 執行緒的取消
執行緒的取消 即 執行緒的終止 某個執行緒,可以要求指定的執行緒終止!方法 1.傳送取消請求 pthread cancel 原型 int pthread cancel pthread t thread 注意 指定的執行緒接收到這個 請求 後,不一定馬上就終止。取決於 被取消執行緒 的 取消請求 的使...
linux pthread 基本使用
1.概述 該demo主要完成了linux下執行緒建立,以及資源 等操作,相關介面介紹可以參考 2.測試 執行緒程式設計demo 執行緒建立,以及資源 等 pthread並非linux系統的預設庫,而是posix執行緒庫 在linux中將其作為乙個庫來使用,因此加上 lpthread 或 pthrea...
pthread sigmask 控制線程的訊號掩碼
示例1 示例一 遮蔽訊號sigint 編譯 gcc pthread sigmask1.c lpthread 執行後,你發現你按下ctrl c 觸發sigint訊號 這個程式根本停不下來。因為sigint訊號已經如我們所願被遮蔽掉了。include include include include in...