Md.*_*man 13 linux kill thread
这些是数据包接收器进程的各个线程。有没有办法杀死任何单个线程?Linux 是否提供任何特定命令可以终止或向进程下的任何特定线程发送停止信号?
Chr*_*own 16
从更大的进程中杀死单个线程通常是非常危险的。该线程可能:
一般来说,在应用程序本身的管理和同步之外,杀死单个线程是没有意义的。
Bas*_*tch 12
您可能会使用tgkill(2)或tkill
在您的 C 程序中使用(您需要使用syscall(2)),但您不想使用. 从您的程序内部,您可以使用pthread_kill(3) - 这很少有用。
(我不完全知道tgkill
或tkill
- 例如与SIGKILL
或SIGTERM
- 对线程有什么影响)
在并行线程(7)库使用低层次的东西(包括一些信号(7) -s和futex的(7) -S等等;另见NPTL(7) ),如果你生杀死(有tkill
或tgkill
)部分单个线程,您的进程将处于某种错误状态(因此未定义的行为),因为某些内部不变量会被破坏。
因此,请研究数据包接收器程序的文档并找到其他方法。如果是自由软件,研究它的源代码并改进它。
更仔细地阅读signal(7)和signal-safety(7)。信号旨在发送到进程(通过kill(2))并在线程中处理。
在实践中,信号和线程不能很好地结合。阅读一些pthread 教程。
一种常见的伎俩,编码当一个多线程程序(和想要处理外部像信号SIGTERM
)是使用管道(7)到自己的过程和调查(2)该管道在其他线程(你也可以考虑在Linux特定的signalfd(2) ),使用信号处理程序write(2) - 将一个字节或几个字节放入该管道。这个众所周知的技巧在Qt 文档中有很好的解释(即使没有 Qt,您也可以在自己的程序中使用它)。