Linux 如何杀死使用CLONE_线程生成并在内核空间的共享资源上被阻止的线程?
我有一个测试用例,其中有使用CLONE()中的CLONE\u THREAD选项生成的线程。如果我想杀死一个特定的线程,我想我们应该在systemcall()中使用SYS\u tgkill。但是如果线程在内核空间中等待(比如futex_等待),那么kill会影响线程吗Linux 如何杀死使用CLONE_线程生成并在内核空间的共享资源上被阻止的线程?,linux,kernel,futex,Linux,Kernel,Futex,我有一个测试用例,其中有使用CLONE()中的CLONE\u THREAD选项生成的线程。如果我想杀死一个特定的线程,我想我们应该在systemcall()中使用SYS\u tgkill。但是如果线程在内核空间中等待(比如futex_等待),那么kill会影响线程吗 我试图终止以上述方式创建的线程。但是当SIGKILL被发送到同一个线程时,整个进程都被终止。我在使用syscall(SYS\u tgkill,pid,tid,9)时是否遗漏了什么内容?SIGKILL始终终止目标进程。这是没有办法的;
我试图终止以上述方式创建的线程。但是当SIGKILL被发送到同一个线程时,整个进程都被终止。我在使用syscall(SYS\u tgkill,pid,tid,9)时是否遗漏了什么内容?
SIGKILL
始终终止目标进程。这是没有办法的;它是不可锁定、不可识别和不可锁定的
您可以尝试发送另一个信号(如SIGUSR1
或SIGHUP
或SIGRTMIN
),并安装一个调用pthread\u exit
的信号处理程序(但请注意,此函数不是异步信号安全函数,因此必须确保信号处理程序没有中断另一个异步信号不安全函数)或者使用取消(pthread\u cancel
)停止被阻止的线程
这应该适用于正常的阻塞操作(如等待来自管道或套接字的数据),但如果线程处于不可中断的睡眠状态(如尝试从严重擦伤的CD或出现故障的硬盘中读取数据),则不会对您有所帮助