pthread中向線程發送信號
阿新 • • 發佈:2018-06-17
發送信號 nal 斷線 檢查 sig handle 信號 描述 其他
pthread_kill 語法
int pthread_kill(thread_t tid, int sig);
#include <pthread.h> #include <signal.h> int sig; pthread_t tid; int ret; ret = pthread_kill(tid, sig);
pthread_kill() 將信號 sig 發送到由 tid 指定的線程。tid 所指定的線程必須與調用線程在同一個進程中。sig 參數必須來自 signal(5) 提供的列表。
向指定ID的線程發送sig信號如果線程代碼內不做處理,則按照信號默認的行為影響整個進程,也就是說,如果你給一個線程發送了SIGQUIT,但線程卻沒有實現signal處理函數,則整個進程退出。
pthread_kill(threadid, SIGKILL)也一樣,殺死整個進程。
如果要獲得正確的行為,就需要在線程內實現signal(SIGKILL,sig_handler)了。
所以,如果int sig的參數不是0,那一定要清楚到底要幹什麽,而且一定要實現線程的信號處理函數,否則,就會影響整個進程。
OK,如果int sig是0呢,這是一個保留信號,一個作用是用來判斷線程是不是還活著(將執行錯誤檢查,但並不實際發送信號。此錯誤檢查可用來檢查 tid 的有效性。)。
pthread_kill 返回值
pthread_kill() 在成功完成之後返回零。其他任何返回值都表示出現了錯誤。如果出現以下任一情況,pthread_kill() 將失敗並返回相應的值。
EINVAL
描述:
sig 是無效的信號量。
ESRCH
描述:
當前的進程中找不到 tid。
pthread中向線程發送信號