2012-11-16 71 views

回答

1

如果你編程一個分離的線程死後做它的工作,那麼它會死。在完成其工作後,該功能可以簡單地結束或致電pthread_exit

您可以通過發送信號pthread_kill或使用全局標誌或IPC形式(例如管道或消息隊列)來從另一個線程中終止分離的線程。請注意,「殺死」這個詞在英語和節目的多重含義之間是不明確的。該線程需要編程以對任何使用的通知機制作出反應。例如,應該爲線程安裝信號處理程序,並且使用pthread_killpthread_sigqueue發送的非進程範圍信號(例如SIGUSR1)。最後pthreads有一個取消機制,你可以使用pthread_cancel和相關的調用。在所有這些場景中,重點是必須對線程進行編程以優雅地處理請求,但「分離」並不意味着「不可訪問」。

如果信號的處置停止,繼續或終止它將影響整個過程而不是單個線程。

+2

'pthread_kill'不會殺死任何東西,就像'kill'不會殺死任何東西。它發送一個信號。一些信號具有**整個進程的**默認行爲終止**(從來沒有一個線程);一個('SIGKILL')總是導致進程終止。如果沒有任何線程從啓動函數返回,調用'pthread_exit',或者作用於取消請求,就沒有辦法讓任何線程「死掉」。 –

+0

我知道。我下班。稍後我會給出更完整的答案。 – Duck

+0

謝謝鴨子。我正在尋找一個線程是否可以在沒有父進程停止的情況下意外停止。 – CoryC

相關問題