0
我试图在__do_page_fault
异常处理程序的主体内创建一个Kthread。此线程将执行一些工作(打印导致异常的用户进程的pc,并使用ptrace跟踪它)。在异常处理程序内部创建的Linux内核线程停止
目前我只是在一个不返回的循环中打印电脑,但系统会在一段时间后挂起,就像Kthread应该返回以便用户进程继续执行一样。
这是KTHREAD的代码:
int th1(void * data){
struct task_struct * tsk= (struct task_struct*) data;
int pid = tsk->pid;
int id= current->pid;
printk("thread %d is tracking %d ",id, tsk->pid);
while(true){
mdelay(100000);
printk("%d, %ud\n",id,task_pt_regs(tsk)->ARM_pc);
}
}
这在那里创建:
if (likely(!(fault & (VM_FAULT_ERROR | VM_FAULT_BADMAP | VM_FAULT_BADACCESS)))){
printk("the page fault was made by the procces id %d\n",tsk->pid);
if(tsk->is_tracked == 0) {
tsk->is_tracked=1 ;
struct task_struct * child_debugger;
void * data = (void *) tsk;
child_debugger = kthread_create(th1,data, "os2");
if(child_debugger) {
wake_up_process(child_debugger);
}else{
printk("error\n");
}
printk("thread went out \n");
}
return 0 ;
}