Shell
如何殺死程序的特定執行緒?
$ 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
這顯示了
myp
PID = 797 的程序和具有不同 SPID 的四個執行緒。如何在不殺死整個程序的情況下殺死程序的特定執行緒。我知道,在某些情況下,當該特定執行緒存在致命依賴時,這可能根本不可能。但是,在任何情況下都可能嗎?是的,怎麼樣?
我試過
kill 799
了,這個過程本身就被終止了。現在我不確定這是因為在myp
沒有程序的情況下存在導致失敗的依賴項,800
或者因為 kill 很簡單,無法殺死單個程序。
執行緒是程序不可分割的一部分,不能在程序之外被殺死。有pthread_kill函式,但它僅適用於執行緒本身的上下文。從連結上的文件:
請注意, pthread_kill() 僅導致在給定執行緒的上下文中處理信號;信號動作(終止或停止)會影響整個過程。
這個問題的標準答案是:通過過程的合作,通過它提供的任何機制。沒有程序的配合,這是不可能的。程序由執行緒組成是程序的內部細節,也就是說,通過有意設計,不會暴露在程序之外。