Linux kernel 如果设备节点正在使用,如何使用程序进行优雅的删除/或不删除

Linux kernel 如果设备节点正在使用,如何使用程序进行优雅的删除/或不删除,linux-kernel,char,driver,linux-device-driver,pci-e,Linux Kernel,Char,Driver,Linux Device Driver,Pci E,我使用mknod命令为pcie驱动程序创建了此设备节点 /dev/pciedrv 在设备节点文件打开(正在使用)时删除驱动程序时,系统崩溃 rmmod -f pciedrv 有什么方法可以优雅地退出吗?另外,如何处理用户应用程序访问文件时在关闭设备节点之前意外终止的情况 rmmod的帮助说明: -f、 --力 强制卸载模块并可能使您的计算机崩溃 不要使用-f。 只要模块还在使用,正确写入的驱动程序就会阻止模块的拆卸 优雅退出要求已打开设备节点的应用程序优雅退出。 但是,即使应用程序意外终止,

我使用mknod命令为pcie驱动程序创建了此设备节点

/dev/pciedrv
在设备节点文件打开(正在使用)时删除驱动程序时,系统崩溃

rmmod -f pciedrv

有什么方法可以优雅地退出吗?另外,如何处理用户应用程序访问文件时在关闭设备节点之前意外终止的情况

rmmod的帮助说明:

-f、 --力
强制卸载模块并可能使您的计算机崩溃

不要使用
-f
。 只要模块还在使用,正确写入的驱动程序就会阻止模块的拆卸

优雅退出要求已打开设备节点的应用程序优雅退出。
但是,即使应用程序意外终止,内核也会关闭文件。

如果没有清除,请询问问题。在运行
rmmod
之前,制作一个shell脚本,检查设备节点是否正在使用中(使用
lsof
)?我们可以在驱动程序代码中执行吗?我想可以。但是在这种情况下,它不使用lsof,因为驱动程序已经知道它是否正在被其他程序使用。你能帮我在哪里用代码来做这件事吗。我选中了BDW,下面的命令并没有列出pciedrv节点,即使它正在使用。lsof | grep pciedrvSo在调用rmmod时,使用-f和不使用-f,驱动程序中的回调级别有什么不同?如果您没有给每个设备-f,系统调用是否会删除回调?