如何杀死进程的特定线程?

Laz*_*zer 22 shell process kill thread multithreading

$ 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
Run Code Online (Sandbox Code Playgroud)

这显示了mypPID = 797的进程和具有不同 SPID 的四个线程。

如何在不杀死整个进程的情况下杀死进程的特定线程。我知道在某些情况下,当对该特定线程存在致命依赖时,这可能根本不可能。但是,在任何情况下都可能吗?是的,如何?

我试过kill 799了,过程本身就终止了。现在我不确定这是因为有依赖项在myp没有进程的情况下导致失败,800或者因为 kill 很简单,无法杀死单个进程。

gvk*_*vkv 29

线程是进程的一个组成部分,不能在进程之外被杀死。有pthread_kill函数,但它仅适用于线程本身的上下文。从链接中的文档:

请注意, pthread_kill() 仅导致在给定线程的上下文中处理信号;信号动作(终止或停止)影响整个过程。

  • @Lazer,一个线程无法在另一个线程更新文本的同时检查拼写,因为您正在打字。正因为如此,有一个后台拼写检查线程,它必须做一些事情,比如抢锁以防止其他线程更改文本,复制一些单词,释放锁,然后检查复制的单词背景。如果你在它持有锁时碰巧杀死了它,你会在你尝试输入时立即挂起另一个线程。多线程应用程序充满了这样的相互依赖。 (2认同)

Dav*_*rtz 7

这个问题的标准答案是:通过进程的合作,无论它提供什么机制。没有进程的配合,是不可能的。进程由线程组成是进程的内部细节,通过有意设计,不会暴露在进程之外。