Linux 多線程環境下 進程線程終止函數小結

來源:互聯網
上載者:User

pthread_kill:

pthread_kill與kill有區別,是向線程發送signal。,大部分signal的預設動作是終止進程的運行,所以,我們才要用signal()去抓訊號並加上處理函數。

int pthread_kill(pthread_t thread, int sig);

向指定ID的線程發送sig訊號,如果線程代碼內不做處理,則按照信號預設的行為影響整個進程,也就是說,如果你給一個線程發送了SIGQUIT,但線程卻沒有實現signal處理函數,則整個進程退出

pthread_kill(threadid, SIGKILL)殺死整個進程。 如果要獲得正確的行為,就需要線上程內實現signal(SIGKILL,sig_handler)。所以,如果int sig的參數不是0,那一定要清楚到底要幹什麼,而且一定要實現線程的訊號處理函數,否則,就會影響整個進程。

如果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

函數原型:

int pthread_cancel(pthread_t thread);

向thread發送一個取消執行的請求。如果成功則返回0,否則為非0值。發送成功並不意味著thread會終止。成功返回零,出錯返回非零的出錯碼ESRCH:沒有找到thread指定ID的線程。

 

abort和exit的比較

exit會做一些釋放工作:釋放所有的靜態全域的對象,緩衝,關掉所有的I/O通道,然後終止程式。如果有函數通過atexit來註冊,還會按照atexit的相反順序調用註冊的函數。不過,如果atexit函數扔出異常的話,就會直接調用terminate。

abort:立刻terminate程式,沒有任何清理工作。

 

 

這裡附上線程基本函數:

------------------------------------------------------------------------------------------                     POSIX函數                                                    描述-------------------------------------------------------------------------------------------                    pthread_create                                    建立一個線程                    pthread_self                                        找出自己的線程ID                    pthread_equal                                     測試2個線程ID是否相等                    pthread_detach                                   設定線程以釋放資源                    pthread_join                                        等待一個線程                    pthread_cancel                                    終止另一個線程                    pthread_exit                                        退出線程,而不退出進程                    pthread_kill                                         向線程發送一個訊號-------------------------------------------------------------------------------------------
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.