获取有关cgroup流程更改的通知?

时间:2016-03-08 21:23:20

标签: linux inotify cgroups

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

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

1 个答案:

答案 0 :(得分:2)

inotify无法在此类虚拟文件系统上运行,无论是cgroupproc还是sys

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

这是因为文件和目录实际上并不存在每次看到(例如它们占用0个磁盘空间),当你访问时它们是由内核为你生成的它们

所以另一种选择是周期性地在繁忙的循环中主动访问文件和目录,这非常难看,在大多数情况下它不是真正的替代方案。

这就是为什么tophtop之类的程序消耗了如此多的CPU。他们实际上并且以事件方式主动浏览proc虚拟文件系统而不是inotifyselect或类似的东西。

编辑:

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

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