我正在开发 Linux 内核字符驱动程序,在读取函数中,我在一个循环中休眠,直到我从硬件中获取数据。如果我在读取系统调用中被阻止时终止用户应用程序,则在我从读取系统调用返回之前该应用程序仍在运行。是否有可能在驱动程序中确定应用程序已终止,以便我可以从循环中返回?
最佳答案
当您等待数据时,您应该将进程添加到等待队列 (add_wait_queue()),然后使用 set_current_state(TASK_INTERRUPTIBLE) 并调用 schedule()。当数据进来时 - 它应该以某种方式被识别 - 例如使用一些中断然后唤醒 sleep 任务(wake_up())。内核源代码中有很多示例。
换句话说 - 在读取函数中,当没有数据时您需要进入休眠状态,而在其他路径(中断)中您需要唤醒此读取函数。最好不要执行忙等待读取功能。
关于c - Linux 内核在驱动程序读取功能中休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51168780/