我正在编写一个监视正在运行的进程的 Linux 模块,我希望在创建新进程时得到通知。
我一直在研究,我了解到可以读取 /proc/some-id 来获取进程信息,但 inotify 不会报告对/proc 的更改,因为它是一个虚拟 fs。它只在阅读时提供信息。
以下是我的发现,以防有人也在尝试解决类似问题:
<强>1。 pnotify(进程通知)
链接:http://lwn.net/Articles/153187/这是最接近我正在尝试做的事情,但是它是在 2005 年发布的,并且似乎没有进入 linux 发行版。这个想法是在 inotify 旁边有一个 pnotify,并为进程监控提供类似的支持。
<强>2。过程连接器
这个解决方案实际上是用户空间。它使用 PF_NETLINK 为任何新创建的进程与内核通信。
<强>3。扫描task_struct
类似于 2,除了此解决方案使用扫描内核中的任务列表以查找新进程
for_each_task(task)
proc 信息被写入一个字符设备。用户空间应用程序将通过读取字符设备来轮询新信息。
TBH,我仍然希望 linux 有一些类似于 Windows 的机制 PsSetCreateProcessNotifyRoutine :-/
最佳答案
实现 SE Linux 安全模块并使用 Hook ,例如在 fork()
的上下文中调用的 .task_create,或在以下位置调用的一个或多个 .bprm_* Hook 调用execv()
过程中的各个点。
看这里:
http://en.wikipedia.org/wiki/Linux_Security_Modules
这里:
http://selinuxproject.org/page/NB_LSM
这里有一个例子:
http://lxr.free-electrons.com/source/security/selinux/hooks.c
大部分你需要做的只是传递,在 Hook 之外,你可以在 fork()
或 execv()
时用作通知打电话。
请务必正确链接您的模块。
关于c - 检测 Linux 内核空间中的进程创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29708706/