Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何杀死使用CLONE_线程生成并在内核空间的共享资源上被阻止的线程?_Linux_Kernel_Futex - Fatal编程技术网

Linux 如何杀死使用CLONE_线程生成并在内核空间的共享资源上被阻止的线程?

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始终终止目标进程。这是没有办法的;

我有一个测试用例,其中有使用CLONE()中的CLONE\u THREAD选项生成的线程。如果我想杀死一个特定的线程,我想我们应该在systemcall()中使用SYS\u tgkill。但是如果线程在内核空间中等待(比如futex_等待),那么kill会影响线程吗


我试图终止以上述方式创建的线程。但是当SIGKILL被发送到同一个线程时,整个进程都被终止。我在使用syscall(SYS\u tgkill,pid,tid,9)时是否遗漏了什么内容?

SIGKILL
始终终止目标进程。这是没有办法的;它是不可锁定、不可识别和不可锁定的

您可以尝试发送另一个信号(如
SIGUSR1
SIGHUP
SIGRTMIN
),并安装一个调用
pthread\u exit
的信号处理程序(但请注意,此函数不是异步信号安全函数,因此必须确保信号处理程序没有中断另一个异步信号不安全函数)或者使用取消(
pthread\u cancel
)停止被阻止的线程

这应该适用于正常的阻塞操作(如等待来自管道或套接字的数据),但如果线程处于不可中断的睡眠状态(如尝试从严重擦伤的CD或出现故障的硬盘中读取数据),则不会对您有所帮助