Linux多線程環(huán)境下 關(guān)于進程線程終止函數(shù)總結(jié)
pthread_kill:
pthread_kill與kill有區(qū)別,是向線程發(fā)送signal。,大部分signal的默認動作是終止進程的運行,所以,我們才要用signal()去抓信號并加上處理函數(shù)。
int pthread_kill(pthread_t thread, int sig);
向指定ID的線程發(fā)送sig信號,如果線程代碼內(nèi)不做處理,則按照信號默認的行為影響整個進程,也就是說,如果你給一個線程發(fā)送了SIGQUIT,但線程卻沒有實現(xiàn)signal處理函數(shù),則整個進程退出。
pthread_kill(threadid, SIGKILL)殺死整個進程。 如果要獲得正確的行為,就需要在線程內(nèi)實現(xiàn)signal(SIGKILL,sig_handler)。所以,如果int sig的參數(shù)不是0,那一定要清楚到底要干什么,而且一定要實現(xiàn)線程的信號處理函數(shù),否則,就會影響整個進程。
如果int sig是0呢,這是一個保留信號,一個作用是用來判斷線程是不是還活著。pthread_kill的返回值: 成功:0 線程不存在:ESRCH 信號不合法:EINVAL
代碼:
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");
pthread_cancel
函數(shù)原型:
int pthread_cancel(pthread_t thread);
向thread發(fā)送一個取消執(zhí)行的請求。如果成功則返回0,否則為非0值。發(fā)送成功并不意味著thread會終止。成功返回零,出錯返回非零的出錯碼ESRCH:沒有找到thread指定ID的線程。
abort和exit的比較
exit會做一些釋放工作:釋放所有的靜態(tài)的全局的對象,緩存,關(guān)掉所有的I/O通道,然后終止程序。如果有函數(shù)通過atexit來注冊,還會按照atexit的相反順序調(diào)用注冊的函數(shù)。不過,如果atexit函數(shù)扔出異常的話,就會直接調(diào)用terminate。
abort:立刻terminate程序,沒有任何清理工作。
這里附上線程基本函數(shù):
----------------------------------------------------------------
POSIX函數(shù) 描述
----------------------------------------------------------------
pthread_create 創(chuàng)建一個線程
pthread_self 找出自己的線程ID
pthread_equal 測試2個線程ID是否相等
pthread_detach 設(shè)置線程以釋放資源
pthread_join 等待一個線程
pthread_cancel 終止另一個線程
pthread_exit 退出線程,而不退出進程
pthread_kill 向線程發(fā)送一個信號
---------------------------------------------------------------
以上就是小編為大家?guī)淼腖inux多線程環(huán)境下 關(guān)于進程線程終止函數(shù)總結(jié)全部內(nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
Apache Rewrite實現(xiàn)URL的301跳轉(zhuǎn)和域名跳轉(zhuǎn)
Rewirte主要的功能就是實現(xiàn)URL的跳轉(zhuǎn),它的正則表達式是基于Perl語言??苫诜?wù)器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式2012-05-05
Linux系統(tǒng)中systemd服務(wù)啟動失敗問題排查和解決方法(以ad_auth.service為例)
在 Linux 系統(tǒng)中,systemd 是管理服務(wù)和進程的核心工具,然而,在實際運維中,我們經(jīng)常會遇到服務(wù)啟動失敗的情況,本文將以一個具體的案例——ad_auth.service 啟動失敗為例,詳細介紹如何排查和解決此類問題,需要的朋友可以參考下2025-01-01
Linux CentOS下安裝Tomcat9及web項目的部署
本文講解在Linux CentOS下安裝Tomcat9,以及Web項目的部署發(fā)布過程,通過實例代碼相結(jié)合的形式給大家介紹的非常的詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2018-07-07
Linux入門之網(wǎng)絡(luò)系統(tǒng)詳解
大家好,本篇文章主要講的是Linux入門之網(wǎng)絡(luò)系統(tǒng)詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12

