我写了一个内核模块来监视cpu和内存时间序列。除此之外,我还要记录所有进程的创建(以及它们的元数据(如pid,cmdline等),并且还与它们的统计信息(如I / O总数和CPU使用率)一起存在。
主要问题是:我可以创建一种侦听器来创建和退出进程吗?特别是在退出时,我还需要该过程的元信息。该怎么办?
答案 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