Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在Linux内核空间中检测进程创建_C_Process_Module_Linux Kernel - Fatal编程技术网

C 在Linux内核空间中检测进程创建

C 在Linux内核空间中检测进程创建,c,process,module,linux-kernel,C,Process,Module,Linux Kernel,我正在编写一个监视运行进程的Linux模块,我希望在创建新进程时收到通知 我一直在研究,我了解到可以读取/proc/someid来获取进程信息,但inotify不会报告对/proc的更改,因为它是一个虚拟fs。它仅在读取时提供信息 以下是我的发现,以防有人试图解决类似问题: 1。pnotify(流程通知) 链接:这是最接近我想要做的,但是它是在2005年发布的,似乎没有进入linux发行版。其想法是在inotify旁边有一个pnotify,并为流程监控提供类似的支持 2。过程连接器 这个解决方案

我正在编写一个监视运行进程的Linux模块,我希望在创建新进程时收到通知

我一直在研究,我了解到可以读取/proc/someid来获取进程信息,但inotify不会报告对/proc的更改,因为它是一个虚拟fs。它仅在读取时提供信息

以下是我的发现,以防有人试图解决类似问题:

1。pnotify(流程通知)

链接:这是最接近我想要做的,但是它是在2005年发布的,似乎没有进入linux发行版。其想法是在inotify旁边有一个pnotify,并为流程监控提供类似的支持

2。过程连接器

这个解决方案实际上是用户空间。它使用PF_NETLINK为任何新创建的进程与内核通信

3。扫描任务结构

与2类似,除了此解决方案使用

for_each_task(task) 
proc info被写入char设备。用户空间应用程序将通过读取char设备轮询新信息


TBH,我仍然希望linux有一些类似Windows的机制:-/

实现一个SE linux安全模块,并使用钩子,例如在
fork()
上下文中调用的.task\u create,或者在调用
execv()
过程中的不同点调用的一个或多个.bprm\u*钩子

请看这里:

在这里:

这里有一个例子:

您需要做的大部分工作只是在钩子之外进行传递,当调用
fork()
execv()
时,可以将钩子用作通知


请确保正确链接您的模块。

嗨,安德鲁,我刚刚为我的ubuntu实例配置了SELinux,并将在尝试后更新此线程。谢谢事实证明,您可以使用kprobes跟踪do_fork()调用,这可能很有用。