linux中pthread_kill函数详解
生活随笔
收集整理的這篇文章主要介紹了
linux中pthread_kill函数详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)int pthread_kill(pthread_t thread, int sig);向指定ID的線程發送sig信號
(2)pthread_kill可不是kill,而是向線程發送signal。還記得signal嗎,大部分signal的默認動作是終止進程的運行,所以,我們才要用signal()去抓信號并加上處理函數。如果線程代碼內不做處理,則按照信號默認的行為影響整個進程,也就是說,如果你給一個線程發送了SIGQUIT,但線程卻沒有實現signal處理函數,則整個進程退出。pthread_kill(threadid, SIGKILL)也一樣,殺死整個進程。
如果要獲得正確的行為,就需要在線程內實現signal(SIGKILL,sig_handler)了。
所以,如果int sig的參數不是0,那一定要清楚到底要干什么,而且一定要實現線程的信號處理函數,否則,就會影響整個進程。
如果int sig是0呢,這是一個保留信號,一個作用是用來判斷線程是不是還活著。
(3)pthread_kill的返回值:
成功:0
線程不存在:ESRCH
信號不合法:EINVAL
所以,pthread_kill(threadid,0)就很有用啦。
int kill_rc = pthread_kill(thread_id,0); if(kill_rc == ESRCH) printf("the specified thread did not exists or already quit\n"); else if(kill_rc == EINVAL) printf("signal is invalid\n"); else printf("the specified thread is alive\n");上述的代碼就可以判斷線程是不是還活著了。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的linux中pthread_kill函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下线程错误码表
- 下一篇: Linux下的kill函数的用法