我正在研究一个Linux内核项目。在我的项目中,我修改了内核,以便从我的一个模块调用copy_process
来响应对proc文件条目的写入。从本质上讲,事情看起来很糟糕:
int procfile_write(struct file *file, const char *buffer, unsigned long count,
void *data)
{
//...more code
copy_process(...);
//...more code
}
int init_module()
{
/* create the /proc file */
Our_Proc_File = create_proc_entry(PROCFS_NAME, 0644, NULL);
// more code
Our_Proc_File->write_proc = procfile_write;
return 0; /* everything is ok */
}
我的问题是当内核遇到该行时,内核会在copy_process
内挂起:
write_lock_irq(&tasklist_lock);
现在,我知道这个函数一直在do_fork
被调用。这发生在系统调用中。
我的问题:
谢谢!
更新:在处理对proc文件的写入以从系统调用中调用时,我转换了调用代码的方式。没有改变。到达同一行时仍然挂起(即锁定tasklist_lock)。现在,我的问题是它挂在那里的原因?以及如何解决这个问题?