基本上,通常用于通知文件系统更改的inotify在cgroup虚拟文件系统中不起作用。
基本上我想要一种方法来获取类似于inotify的通知,当cgroup中的进程死亡或分叉时。我尝试将inotify附加到cgroup文件系统中的tasks
虚拟文件,但是当进程自行分叉时,只有当一个使用空间工具实际上手动写入它以影响cgroup时,它才会执行任何操作。
答案 0 :(得分:2)
inotify
无法在此类虚拟文件系统上运行,无论是cgroup
,proc
还是sys
。
注意:我也试过这个,在某些情况下它会非常方便,但不是。 : - )
这是因为文件和目录实际上并不存在每次看到(例如它们占用0个磁盘空间),当你访问时它们是由内核为你生成的它们
所以另一种选择是周期性地在繁忙的循环中主动访问文件和目录,这非常难看,在大多数情况下它不是真正的替代方案。
这就是为什么top
,htop
之类的程序消耗了如此多的CPU。他们实际上并且以事件方式主动浏览proc
虚拟文件系统而不是inotify
或select
或类似的东西。
编辑:
但是有一些事情可以帮助你:
1 /对于最近的内核(cgroup已经重新设计):
看看:
https://www.kernel.org/doc/Documentation/cgroup-v2.txt
我引用:
2-3。 [Un]填充通知
每个非root cgroup都有一个包含的“cgroup.events”文件 “填充”字段,指示cgroup的子层次结构是否具有 其中的实时流程。如果没有实时进程,则其值为0 cgroup及其后代;否则,1。民意调查和[id]通知 值更改时会触发事件。 [...]
1 /对于较旧的内核:
您可能需要查看notify_on_release
和release_agent
。看看:
https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
- notify_on_release flag:退出时运行发布代理?
- release_agent:用于发布通知的路径(此文件仅存在于顶级cgroup中)
以及“1.4 notify_on_release做什么?”部分和“1.5 clone_children做什么?”