1. 程式人生 > >pthread中向線程發送信號

pthread中向線程發送信號

發送信號 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中向線程發送信號