在自己的内核模块中,在磁盘睡眠时SIGSTOP任务

我目前正在开发一个使用定制核心格式的崩溃收集机制。 本质上,它挂钩了linux_binfmt-> core_dump条目,指向我们的自卸车。

在允许内核完全终止进程之前,翻料机本身通过进程的PID启动一个用户模式助手来获取哪个转储过程信息通过ptrace:

call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC); 

我的问题是,这个任务在技术上处于磁盘睡眠状态,并没有停止,所以ptrace调用失败。

我试图SEND_SIG_FORCED一个SIGSTOP无济于事:

 send_sig_info(SIGSTOP, SEND_SIG_FORCED, current); 

任何有关如何仍然阻止进程终止,但将其置于停止状态以获得ptrace usermode收集器工作的build议将不胜感激。

找到了一个解决方案,部分原因是在ptrace中检查了一些不一致的标志:

 printk(KERN_INFO "%s Launching usermode helper for %d\n", __FUNCTION__, current->pid); call_usermodehelper(argv[0], argv, envp, UMH_NO_WAIT); set_current_state(TASK_UNINTERRUPTIBLE | TASK_TRACED); schedule(); printk(KERN_INFO "%s user-mode helper done! killing pid %d\n", __FUNCTION__, current->pid); 

这将任务置于跟踪睡眠状态,助手可以将其附加到它。