如何使用内核模块监控进程创建和统计
How to monitor process creation and statistics using kernel module
我写了一个内核模块来监控cpu和内存时间序列。除此之外,我想记录所有进程创建(以及它们的元日期,如 pid、cmdline 等),并且还存在它们的统计数据,如总 I/O 和 CPU 使用情况。
主要问题是:我可以创建一种进程创建和退出的侦听器吗?特别是在退出时,我还需要该过程的元信息。如何做到这一点?
您所描述的内容听起来很像 the Linux process accounting system,它已经存在于内核中。如果它不完全适合,最好的办法是考虑扩展它,而不是构建全新的东西。
要查看的另一个现有系统是 the process events connector,它可用于在创建和退出其他进程时通知用户空间进程。
我知道您在谈论使用 Linux 内核模块监视进程。
但我认为 python 模块 psutil 值得一提。即使是用户-space解决方案。
这是一个非常完整的工具,可以监控进程使用的资源,内存,磁盘,CPU。
来自the documentation的一些示例:
正在获取 CPU 某些进程的用法
>>> 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
,如下所示:psutil.Process(pid)
我写了一个内核模块来监控cpu和内存时间序列。除此之外,我想记录所有进程创建(以及它们的元日期,如 pid、cmdline 等),并且还存在它们的统计数据,如总 I/O 和 CPU 使用情况。
主要问题是:我可以创建一种进程创建和退出的侦听器吗?特别是在退出时,我还需要该过程的元信息。如何做到这一点?
您所描述的内容听起来很像 the Linux process accounting system,它已经存在于内核中。如果它不完全适合,最好的办法是考虑扩展它,而不是构建全新的东西。
要查看的另一个现有系统是 the process events connector,它可用于在创建和退出其他进程时通知用户空间进程。
我知道您在谈论使用 Linux 内核模块监视进程。
但我认为 python 模块 psutil 值得一提。即使是用户-space解决方案。
这是一个非常完整的工具,可以监控进程使用的资源,内存,磁盘,CPU。
来自the documentation的一些示例:
正在获取 CPU 某些进程的用法
>>> 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
,如下所示:psutil.Process(pid)