linux驱动检查过程是活的

问题描述 投票:0回答:1

我有一个简单的linux模块,用于工作中的中断,每次有中断时,我都会向我的进程pid发送信号,但我如何检查pid是否还活着呢?我试着在一个中断处理函数中使用find_task_by_vpid,但之后有些时候内核会崩溃。

NIP [c003ba9c] find_task_by_vpid+0x2c/0x4cfind_task_by_vpi d[ 782.391934] Unable to handle kernel 

所以现在我只得到一次find_task_by_vpid,而且工作正常,但是当我用 "kill -9 "杀我的进程时,我的内核就崩溃了。

c++ linux
1个回答
0
投票

PIDs不是一个可靠的识别进程的方法。PID可以被重复使用,所以如果你的目标进程终止了(不管什么原因),它的PID可能会被重复使用,而你的内核模块不会因此而得到通知。所以。

不要用PID来和进程通信! ¹

使用文件操作来进行内核和用户空间之间的通信。无论是以字符或块设备的形式在 /dev 或作为procfs中的一个条目 /proc 或在sysfs /sys.

让用户空间进程打开该文件;你的内核模块提供了一系列的 档案操作 处理函数(fops)。当进程终止时,所有的文件描述符都被关闭,而文件描述符中的 密切 fop的内核模块被调用。


1: 事实上,PID在任何地方都是不可靠的,应该避免使用它们。唯一一个PID比较可靠的地方是在父进程内部,因为这个PID是由父进程分叉出来的。wait-s会阻止这个过程完全消失,直到父体处理它的死亡。但系统中的其他人都没有这方面的信息。

© www.soinside.com 2019 - 2024. All rights reserved.