获取有关cgroup进程更改的通知?
基本上,通常用于通知文件系统更改的inotify在cgroup虚拟文件系统中不起作用。获取有关cgroup进程更改的通知?
实质上,我想要一种方式来获取类似于inotify的通知,当cgroup中的进程是死或叉时。我尝试将inotify附加到cgroup文件系统中的虚拟文件tasks
,但是当进程自行分叉时,只有在使用空间工具实际手动写入它以影响cgroup时,它才会执行任何操作。
inotify
不适用于此类虚拟文件系统,无论是cgroup
,proc
还是sys
。
注意:我也试过,在某些情况下,它会非常方便,但不会。 :-)
这是因为文件和目录实际上并不存在每见(例如他们采取0的磁盘空间),他们是为你制作由您访问他们内核飞。
因此,另一种方法是定期主动访问文件和目录,这很丑陋,在大多数情况下它不是真正的选择。
这就是为什么程序如top
,htop
等消耗这么多的CPU。他们确实并积极地浏览虚拟文件系统,而不是使用inotify
或select
或以类似的方式浏览虚拟文件系统。
编辑:
但也有一些事情可以帮助你,但:
1 /对于最新的内核(cgroup中已经被重新设计):
看:
https://www.kernel.org/doc/Documentation/cgroup-v2.txt
我的报价:
2-3。 [联合国]填充通知
每个非根cgroup中具有“cgroup.events”文件,其中包含 “填充”字段,其指示该cgroup的子层次结构是否具有在它 活过程。如果cgroup及其后代中没有活动进程 ,则其值为0;否则,1. poll和[id]通知 当值发生变化时触发事件。 [...]
1 /对于老版本的内核:
你可能想看看notify_on_release
和release_agent
。看看:
https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
- notify_on_release标志:运行在退出脱模剂?
- release_agent:要使用的路径发布通知(该文件只存在于顶部的cgroup)
而部分“什么notify_on_release做1.4?”和“1.5 clone_children做什么?”
注意:如果使用eventfd注册了适当的文件描述符,也可以获得通知。在cgroups2中,您还可以使用inotify(请参阅https://archive.fosdem.org/2017/schedule/event/cgroupv2/attachments/slides/1792/export/events/attachments/cgroupv2/slides/1792/cgroupv2_cdown_fosdem.pdf) – Anon