我正在开发Linux内核字符驱动程序,并且在读取功能中,我处于循环睡眠状态,直到从硬件获取数据为止。如果在读取系统调用中阻止用户应用程序时将其杀死,则该应用程序仍在运行,直到我从读取系统调用中返回。是否有可能在驱动程序中确定应用程序已终止,所以我可以从循环中返回?
答案 0 :(得分:3)
在等待数据时,应将进程添加到等待队列(add_wait_queue()),然后使用set_current_state(TASK_INTERRUPTIBLE)并调用schedule()。当数据进入时-应该以某种方式识别它-例如使用一些中断,然后唤醒睡眠任务(wake_up())。内核源代码中有很多示例。
换句话说-在读取功能中,当没有数据时,您需要进入睡眠状态;在其他路径(中断)中,则需要唤醒此读取功能。最好不要在读取功能中忙于等待。