我在内核空间工作,我想知道应用程序何时停止或崩溃。当我收到一个 ioctl 调用时,我可以获得 struct task_struct ,其中我有很多关于应用程序进程的信息。我的问题是我想定期检查进程是否仍然存在或更好,以便在进程被终止时进行一些异步调用。
我的测试环境在 QEMU 上,在应用程序中运行了一段时间后,我运行了一个系统(“kill -9 pid ”)。同时在内核中,我对 task_struct 进行了定期检查:
volatile long state; /* -1 不可运行,0 可运行,>0 停止 */
static inline int pid_alive(struct task_struct *p)
问题是我的 task_struct 指针似乎没有被修改。通常我会说每个进程都有一个task_struct,当然它与进程状态是对应的。否则我看不到“不稳定的长期状态”的意义
我错过了什么?是我在 QEMU 上进行测试,还是我在一段时间内(1)测试了 task_struct 并且 msleep 为 100?任何帮助,将不胜感激。
如果我能在应用程序关闭模块的文件描述符(“/dev/driver”)时收到应用程序的 pid,我会很高兴。
谢谢!