我对内核线程之间的信号传播有疑问。场景是这样的:
从用户空间应用程序进行系统调用,内核在系统调用中创建一个线程(让我们将其命名为 thread1)。
现在在那个thread1里面,内核在一个while循环中循环并且它被阻塞了。主线程也在一个while循环中循环。如果我执行“kill -9 <"user app pid>”,应用程序将无法正常退出。甚至 /proc 条目仍然存在。尽管 /proc//fd 文件夹变为空。
如果我在主线程的 while 循环中添加以下内容,它会正确捕获信号并退出。如果我只在 thread1 的 while 循环中放入以下内容,则主线程仍然不会退出。
if (signal_pending(current)) {
return;
}
您能否建议,在这种 kill -9 信号的情况下内核应该如何表现?在 SIGKILL 之后,进程的状态变为 Zombie。
系统调用有以下实现:
thread1 = kthread_create(thread_fn, NULL, "thread1");
if (thread1) {
wake_up_process(thread1);
}
printk(KERN_NOTICE "Main thread: current:%s\n", current->comm);
while(1) {
DELAY_SEC(1)
thread_fn 是:
int thread_fn(void* data)
{
while(1) {
DELAY_SEC(1)
}
}
问候,
索尼卡