2016-03-08 70 views
1

基本上,通常用于通知文件系统更改的inotify在cgroup虚拟文件系统中不起作用。获取有关cgroup进程更改的通知?

实质上,我想要一种方式来获取类似于inotify的通知,当cgroup中的进程是死或叉时。我尝试将inotify附加到cgroup文件系统中的虚拟文件tasks,但是当进程自行分叉时,只有在使用空间工具实际手动写入它以影响cgroup时,它才会执行任何操作。

回答

1

inotify不适用于此类虚拟文件系统,无论是cgroup,proc还是sys

注意:我也试过,在某些情况下,它会非常方便,但不会。 :-)

这是因为文件和目录实际上并不存在每见(例如他们采取0的磁盘空间),他们是为你制作由您访问他们内核飞

因此,另一种方法是定期主动访问文件和目录,这很丑陋,在大多数情况下它不是真正的选择。

这就是为什么程序如top,htop等消耗这么多的CPU。他们确实并积极地浏览虚拟文件系统,而不是使用inotifyselect或以类似的方式浏览虚拟文件系统。

编辑:

但也有一些事情可以帮助你,但:

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_releaserelease_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做什么?”

+0

注意:如果使用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

相关问题