我正在编写一个监视正在运行的进程的Linux模块,并且我希望在创建新进程时收到通知。
我一直在研究,我了解到可以读取 / proc / some-id 来获取进程信息,但是inotify不会向/ proc报告更改,因为它是虚拟fs。它只在阅读时提供信息。
以下是我的调查结果,以防有人也试图解决类似的问题:
1。 pnotify(流程通知)
链接:http://lwn.net/Articles/153187/这是我最接近我要做的事情,但它是在2005年发布的,似乎没有进入Linux发行版。我们的想法是让innotify旁边有一个pnotify,并为流程监控提供类似的支持。
2。流程连接器
此解决方案实际上是用户空间。它使用PF_NETLINK与内核进行任何新创建的进程通信。
第3。扫描task_struct
与2类似,但此解决方案使用
扫描内核中的任务列表以查找新进程for_each_task(task)
proc信息被写入char设备。用户空间应用程序将通过读取char设备来轮询新信息。
TBH,我的希望仍然是linux有一些像Windows {PsSetCreateProcessNotifyRoutine这样的机制: - /答案 0 :(得分:4)
实现SE Linux安全模块并使用在fork()
的上下文中调用的.task_create之类的钩子,或者在进程中的各个点调用的一个或多个.bprm_ *钩子。打电话给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
您需要做的大多数事情只是在挂钩之外传递,您可以在调用fork()
或execv()
时将其用作通知。
确保正确链接模块。