我从事 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 文件条目与系统调用有关?
- IRQ 与写入 proc 文件条目有什么关系?
- 写入 proc 文件条目实际上与系统调用不同吗?我的意思是它的处理方式和调用的上下文?
谢谢!
更新:我将调用我的代码的方式从在处理写入 proc 文件时调用代码的方式转换为从系统调用调用的方式。没有改变。到达同一行时仍然挂起(即锁定 tasklist_lock)。现在,我的问题是为什么它挂在那里?以及如何解决这个问题?