linux kernel check if process is still running
我正在内核空间中工作,我想找出应用程序何时停止或崩溃。
当我收到一个ioctl调用时,可以获得结构task_struct,其中有很多有关应用程序过程的信息。
我的问题是我想定期检查该进程是否仍然存在或更好,以便在进程被终止时进行一些异步调用。
我的测试环境在QEMU上,在应用程序中运行了一段时间后,我运行了一个系统(" kill -9 pid")。同时,在内核中,我对task_struct进行了定期检查,内容如下:
易挥发的长状态; / * -1不可运行,0可运行,> 0已停止* /
静态内联int pid_alive(struct task_struct * p)
问题是我的task_struct指针似乎未修改。通常我会说每个进程都有一个task_struct,当然它是进程状态的核心发起者。否则我看不到"不稳定的长期状态"
我想念什么?是否正在QEMU上进行测试,是否已经测试过while(1)中msleep为100的task_struct检查?任何帮助,将不胜感激。
如果我在关闭模块的文件描述符(" / dev / driver")时能够收到应用程序的pid,我会感到部分满意。
谢谢!
您不能脱离
您的驱动程序可以提供
自从我将内核混入内核以来已经有很长时间了。在我看来,如果您的进程实际上死了,那么最好的选择就是将钩子插入破坏进程的代码中。如果它没有死,但是陷入了无响应的循环中,则最好进行应用程序级核心转储。