在另一个进程上下文中调用释放函数

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内核的一般执行过程

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程