我正在研究一个内核模块,我需要“知道”给定的进程崩溃了。当用户进程终止/接收信号时中断内核模块?
现在我的做法是设置内核模块中的周期性定时器中断;在每个定时器中断上,我检查该进程的task_struct.state和task_struct.exitstate值。
我想知道是否有办法在内核模块中设置中断,当进程终止时,或进程收到给定信号(例如,SIGINT或SIGHUP)时该中断会关闭。
谢谢!
编辑:这里的一个前提条件是,我不能修改用户应用程序。或者至少,这将是一个更加艰难卖给如果我把额外的要求/约束的S/W来自其他供应商的客户...
谢谢!这里有一个问题,我应该提到:我无法修改用户应用程序。或者至少,这将是一个困难得多出售给客户,如果我把额外的要求/约束的S/W从其他供应商... 也许修补方法是值得看,但我想的复杂性与贸易如果由于周期性定时器中断导致的性能下降达到可接受性阈值,那么关闭将是值得的... –
有一个封装器来启动应用程序并发信号给你的模块吗?如果子进程(应用程序进程)通过'waitpid()'等进程崩溃或退出,进程的父进程(即包装器)将得到通知。你甚至可以让包装打开驱动程序的设备节点,然后exec()应用程序,而不关闭设备节点。孩子将继承打开的文件描述符并保持打开状态,直到它关闭或终止。封装器不需要在启动应用程序之前存在。 – TrentP