如何使用内核模块监视进程创建和统计信息

时间:2018-08-28 17:05:12

标签: linux module process kernel monitor

我写了一个内核模块来监视cpu和内存时间序列。除此之外,我还要记录所有进程的创建(以及它们的元数据(如pid,cmdline等),并且还与它们的统计信息(如I / O总数和CPU使用率)一起存在。

主要问题是:我可以创建一种侦听器来创建和退出进程吗?特别是在退出时,我还需要该过程的元信息。该怎么办?

2 个答案:

答案 0 :(得分:1)

您所描述的内容听起来像the Linux process accounting system一样怪异,它已经存在于内核中。如果不合适,那么最好的办法就是考虑扩展它,而不是构建全新的东西。

要查看的另一个现有系统是the process events connector,该系统可用于在创建和退出其他进程时通知用户空间进程。

答案 1 :(得分:0)

我知道您正在谈论使用Linux内核模块监视进程。

但是我认为值得一提的是python模块psutil。即使是用户空间解决方案。

这是一个非常完整的工具,它可以监视进程有关其使用的资源,内存,磁盘,CPU的信息。

the documentation中的一些示例:

获取某些进程的CPU使用率

TempData

获取内存信息

>>> import psutil
>>> p = psutil.Process()
>>> # blocking
>>> p.cpu_percent(interval=1)
2.0
>>> # non-blocking (percentage since last call)
>>> p.cpu_percent(interval=None)
2.9

非常有趣的>>> import psutil >>> p = psutil.Process() >>> p.memory_info() pmem(rss=15491072, vms=84025344, shared=5206016, text=2555904, lib=0, data=9891840, dirty=0)

open_files

流程创建时间

>>> import psutil
>>> f = open('file.ext', 'w')
>>> p = psutil.Process()
>>> p.open_files()
[popenfile(path='/home/giampaolo/svn/psutil/file.ext', fd=3, position=0, mode='w', flags=32769)]

当然,您可以查询目标系统中正在运行的任何进程的信息,只需向>>> import psutil, datetime >>> p = psutil.Process() >>> p.create_time() 1307289803.47 >>> datetime.datetime.fromtimestamp(p.create_time()).strftime("%Y-%m-%d %H:%M:%S") '2011-03-05 18:03:52' 提供pid,如下所示:psutil.Process