在另一个进程上下文中调用释放函数
Posted
技术标签:
【中文标题】在另一个进程上下文中调用释放函数【英文标题】:release function is invoked in another process context 【发布时间】:2012-02-08 08:18:56 【问题描述】:我在设备驱动的file_operation中注册了一个释放回调函数,比如:
struct file_operations driver_fops =
.open = drv_open,
.release = drv_release,
.unlocked_ioctl = drv_unlocked_ioctl,
.mmap = drv_mmap,
;
当进程(打开设备文件)被杀死时会调用释放函数。但奇怪的是,当我尝试在 drv_release 中获取当前进程的 pid 时,有时 pid 不属于打开文件的进程。这意味着在另一个进程上下文中调用了 release() 函数。这是正常的吗?
【问题讨论】:
【参考方案1】:也许这是因为 fork()。如果父进程打开您的设备,然后分叉并死亡,然后子进程关闭描述符 - 关闭将来自另一个进程。
【讨论】:
以上是关于在另一个进程上下文中调用释放函数的主要内容,如果未能解决你的问题,请参考以下文章
结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程