2016-03-08 1 views
1

Fondamentalement, inotify qui sert normalement à notifier les changements de système de fichiers ne fonctionne pas dans le système de fichiers virtuel de groupe. Essentiellement je veux un moyen d'obtenir une notification semblable à inotify quand un processus dans un groupe de c soit est des matrices ou des forks. J'ai essayé d'attacher inotify au fichier virtuel tasks à l'intérieur du système de fichiers de groupe, mais cela ne fait rien quand un processus forge tout seul, seulement quand un outil d'espace de travail écrit réellement manuellement pour influencer le groupe de contrôle.Recevoir une notification sur le changement de processus de groupe?

Répondre

1

inotify ne fonctionne pas sur un tel système de fichiers virtuel, que ce soit cgroup, proc ou sys.

Note: J'ai essayé cela aussi, ça aurait été très pratique dans certaines situations, mais non. :-)

Ceci est parce que les fichiers et les répertoires n'existent réellement par voir (par exemple, ils prennent 0 l'espace disque), ils sont produits pour vous à la volée par le noyau que vous visitez les. Donc l'alternative serait de visiter régulièrement les fichiers et dir dans une boucle occupée périodiquement, ce qui est si moche que ce n'est pas une réelle alternative dans la plupart des cas.

Et c'est pourquoi les programmes tels que top, htop et tels consomment tant de CPU. Ils font effectivement et activement parcourir le système de fichiers virtuel proc plutôt que inotify ou select ou des trucs comme ça d'une manière éffective.

EDIT:

Mais il y a certaines choses qui pourraient vous aider si:

1/Pour les noyaux récents (cgroups ont été redessinés):

Regardez:

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

Je cite:

2-3. [Un] peuplé notification

Chaque groupe de contrôle non-root a un fichier « cgroup.events » qui contient champ « peuplé » indiquant si la sous-hiérarchie du groupe de contrôle a processus vivent. Sa valeur est 0 s'il n'y a pas de processus en cours dans le cgroup et ses descendants; sinon, 1. poll et [id] notifier les événements sont déclenchés lorsque la valeur change. [...]

1/Pour les noyaux plus anciens:

Vous pouvez jeter un oeil à notify_on_release et release_agent. Jetez un oeil sur:

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

  • notify_on_release drapeau: exécuter l'agent de démoulage à la sortie?
  • release_agent: le chemin à utiliser pour les notifications de libération (ce fichier existe dans le top cgroup uniquement)

Et les sections "1.4 Qu'est-ce notify_on_release faire?" et "1.5 Que fait clone_children?"

+0

NB: Il est également possible d'obtenir des notifications si vous avez enregistré un descripteur de fichier approprié avec eventfd. Dans cgroups2, vous pouvez également utiliser inotify (voir https://archive.fosdem.org/2017/schedule/event/cgroupv2/attachments/slides/1792/export/events/attachments/cgroupv2/slides/1792/cgroupv2_cdown_fosdem.pdf) – Anon