我在设备驱动程序的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()函数。这是正常的吗?
答案 0 :(得分:0)
也许这是因为fork()。如果父进程打开你的设备,然后分叉并死亡,然后子关闭描述符 - 关闭将来自另一个进程。