1

基本上,通常用于通知文件系统更改的 inotify 在 cgroup 虚拟文件系统中不起作用。

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

4

1 回答 1

3

inotify不适用于此类虚拟文件系统,cgroup无论procsys.

注意:我也试过这个,在某些情况下它会很方便,但是不行。:-)

这是因为文件和目录实际上并不存在(例如它们占用 0 磁盘空间),它们是在您访问它们时由内核为您动态生成的

因此,另一种选择是定期在繁忙的循环中主动访问文件和目录,这非常丑陋,以至于在大多数情况下它不是一个真正的选择。

这就是为什么诸如top,htop之类的程序会消耗这么多 CPU 的原因。他们实际上并积极地浏览proc虚拟文件系统,而不是以事件的方式浏览inotifyselect或类似的东西。

编辑:

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

1/ 对于最近的内核(cgroups 已经重新设计):

看着:

https://www.kernel.org/doc/Documentation/cgroup-v2.txt

我引用:

2-3。[未]填充通知

每个非根 cgroup 都有一个“cgroup.events”文件,其中包含“populated”字段,指示 cgroup 的子层次结构中是否有实时进程。如果 cgroup 及其后代中没有实时进程,则其值为 0;否则, 1. poll 和 [id]notify 事件在值改变时被触发。[...]

1/ 对于旧内核:

您可能想看看notify_on_releaserelease_agent。看一下:

https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt

  • notify_on_release 标志:退出时运行释放代理?
  • release_agent:用于发布通知的路径(该文件仅存在于顶级 cgroup 中)

以及“1.4 notify_on_release 做什么?”部分 和“1.5 clone_children 做什么?”

于 2016-03-09T09:51:40.467 回答