2011-04-25 87 views
1

在多線程環境中,SIGCANCEL發送到線程時會發生什麼?當SIGCANCEL發送到線程時會發生什麼?

如果將SIGKILL發送到線程,行爲會有什麼不同?

+0

我不認爲'SIGCANCEL'在Linux中完全支持。我知道它被POSIX所棄用。 – 2011-04-25 21:10:32

回答

0

像特拉維斯說的,SIGCANCEL已經deprecated並不存在於POSIX標準。

+0

在文件glibc-2.9/nptl/pthread_cancel.c中,我可以找到SIGCANCEL。因此我想知道功能。那麼當你調用pthread_cancel()時會發生什麼? – notytony 2011-04-25 22:10:32

+0

@notytony是的,它似乎仍然存在於glibc 2.9中,但如果你看看內核手冊頁,[它不在](http://www.kernel.org/doc/man-pages/online/pages/ man7/signal.7.html)。我沒有pthread的經驗,但它似乎不是你的標準信號。我讀取的一小部分文檔表明它用於向與調用者處於同一進程的線程發送信號。您可能想將pthread_cancel與[pthread_kill]進行比較(http://glibc.sourcearchive.com/documentation/2.9-9ubuntu2/pthread__kill_8c-source.html)。 – voithos 2011-04-26 04:22:54

0

SIGCANCEL目前在glibc並行線程執行被定義爲__SIGRTMIN使用(內部)。

如果pthread_cancel()被調用的取消類型設置爲異步的線程,它會通過通過tgkill()發送。

相反,這可能意味着接收到__SIGRTMIN的線程的行爲就好像它被異步取消一樣。 (我沒有測試過)

相關問題