Shell

如何殺死程序的特定執行緒?

  • December 27, 2019
$ ps -e -T | grep myp | grep -v grep
 797   797 ?        00:00:00 myp
 797   798 ?        00:00:00 myp
 797   799 ?        00:00:00 myp
 797   800 ?        00:00:00 myp

這顯示了mypPID = 797 的程序和具有不同 SPID 的四個執行緒。

如何在不殺死整個程序的情況下殺死程序的特定執行緒。我知道,在某些情況下,當該特定執行緒存在致命依賴時,這可能根本不可能。但是,在任何情況下都可能嗎?是的,怎麼樣?

我試過kill 799了,這個過程本身就被終止了。現在我不確定這是因為在myp沒有程序的情況下存在導致失敗的依賴項,800或者因為 kill 很簡單,無法殺死單個程序。

執行緒是程序不可分割的一部分,不能在程序之外被殺死。有pthread_kill函式,但它僅適用於執行緒本身的上下文。從連結上的文件:

請注意, pthread_kill() 僅導致在給定執行緒的上下文中處理信號;信號動作(終止或停止)會影響整個過程。

這個問題的標準答案是:通過過程的合作,通過它提供的任何機制。沒有程序的配合,這是不可能的。程序由執行緒組成是程序的內部細節,也就是說,通過有意設計,不會暴露在程序之外。

引用自:https://unix.stackexchange.com/questions/1066