![](/img/trans.png)
[英]how to get process / daemon / program state change notification in linux
[英]Get notification on cgroup process change?
基本上,inotify通常用於通知文件系統更改,在cgroup虛擬文件系統中不起作用。
本質上,當cgroup中的進程死亡或分叉時,我想要一種類似於inotify的通知。 我嘗試將inotify附加到cgroup文件系統內的tasks
虛擬文件,但是僅當一個usespace工具實際上手動寫入它以影響cgroup時,當進程自行分叉時,該操作什么也不做。
inotify
不適用於這種虛擬文件系統,無論是cgroup
, proc
還是sys
。
注意:我也嘗試過,在某些情況下會非常方便,但不會。 :-)
這是因為文件和目錄在每次查看時實際上並不存在 (例如,它們占用0的磁盤空間),它們是由內核在您訪問它們時為您動態生成的 。
因此,替代方案是定期在繁忙的循環中主動訪問文件和目錄,這非常丑陋,因此在大多數情況下不是真正的替代方案。
這就是為什么諸如top
, htop
類的程序會消耗大量CPU的原因。 他們確實確實在積極地瀏覽proc
虛擬文件系統,而不是以事件的方式進行inotify
或select
或填充。
編輯:
但是,有些事情可以幫助您:
1 /對於最新的內核(cgroup已重新設計):
看着:
https://www.kernel.org/doc/Documentation/cgroup-v2.txt
我引用:
2-3。 [未]填充的通知
每個非根cgroup都有一個“ cgroup.events”文件,其中包含“填充”字段,該字段指示cgroup的子層次結構中是否有活動進程。 如果cgroup及其子代中沒有活動進程,則其值為0;否則,值為0。 否則,1.值更改時將觸發poll和[id] notify事件。 [...]
1 /對於較舊的內核:
您可能需要查看notify_on_release
和release_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是做什么的?”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.