首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核能否在它提供服务的几个应用程序中识别出哪个用户应用程序被终止/关闭

内核能否在它提供服务的几个应用程序中识别出哪个用户应用程序被终止/关闭
EN

Stack Overflow用户
提问于 2021-01-28 20:35:01
回答 1查看 31关注 0票数 0

我正在编写一个linux内核驱动程序,它创建一个char设备文件"/dev/my_ file“。多个用户空间应用程序对该文件执行open(),并使用提供的ioctl命令来注册应用程序特定的数据。IOCTL还提供了取消注册命令,当执行干净的退出时,应用程序可以使用和取消注册(内核drv删除应用程序数据,删除任何内存分配等)。但是,如果应用程序在执行open()ioctl注册命令后被终止。驱动程序如何检测哪个应用程序被杀死,然后执行清理任务以删除应用程序特定的数据。我知道来自struct file_operations.release func ptr被调用并通知了驱动程序,但不确定drv如何找到被杀死的特定应用程序。

感谢Sheetal

EN

回答 1

Stack Overflow用户

发布于 2021-01-28 22:30:21

在“应用程序”(或进程)级别上进行清理很棘手,因为调用.release()处理程序的进程上下文不一定与调用.open()处理程序的进程上下文相同。(例如,调用open()的进程可以派生一个子进程并退出,让该子进程作为守护进程运行。)

我建议改为在“打开文件描述”级别上进行清理。每个成功的open()调用都会创建一个打开的文件描述,并且当不再有对该打开的文件描述的引用时,就会调用.release()处理程序。可以使用struct fileprivate_data成员指向由.open()处理程序分配的私有数据结构。“特定于打开文件”数据结构可以有一个指向特定于设备的私有数据结构的成员。

作为一个实际示例,我在"Comedi“子系统的内核代码中执行了上述操作。它的.open()处理程序comedi_open() (请参阅drivers/staging/comedi/comedi_fops.c)分配一个struct comedi_file (struct fileprivate_data成员将指向该成员),并且该struct comedi_file包含指向struct comedi_device类型的设备私有数据的指针(成员dev)。D17的其他成员包含的信息可以在“每个打开的文件”的基础上变化,不能与同一文件的其他D18共享。由D20分配的struct comedi_file.release()处理程序comedi_close()释放(以后我应该将其重命名为D23!)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65937202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档