Überwachung von Einhängepunktänderungen über / proc / mounts

8

Laut Handbuch von proc kann man die Änderungen des Einhängepunktes im Linux-System überwachen, indem man "/ proc / mounts" öffnet und den Dateideskriptor zum Lesen von fd_set in select() call hinzufügt.

Das folgende Code-Stück funktioniert auf Ubuntu 9.04 und nicht in Ubuntu 10.04 (mit 2.6.32 Linux Kernel):

%Vor%

Kompilierbares Snippet.

Der Dateideskriptor ist immer in einer Maschine lesbar und erscheint daher immer im Select-Call. Auch bei mounts gibt es keine Änderungen.

Fehle ich hier etwas?

Vielen Dank im Voraus für jede Hilfe!

man 5 proc:

/ proc / [pid] / mounts (seit Linux 2.4.19)

Dies ist eine Liste aller Dateisysteme, die derzeit im Mount-Namespace des Prozesses eingebunden sind. Das Format dieser Datei ist in fstab (5) dokumentiert. Seit der Kernel-Version 2.6.15 ist diese Datei abfragbar: Nach dem Öffnen der Datei zum Lesen bewirkt eine Änderung in dieser Datei (dh ein Dateisystem-Mount oder Unmount), dass select (2) den Dateideskriptor als lesbar markiert und abfragt ( 2) und epoll_wait (2) markieren die Datei als fehlerhaft.

    
shoban 21.02.2011, 20:16
quelle

4 Antworten

12

Es gab ein Bugfix im Linux-Kernel beschreibt dieses Verhalten:

  

SUSv3 sagt: "Reguläre Dateien sollen immer TRUE zum Lesen und   schreiben ". sehen    Ссылка

Sie müssen also die Abfrage mit POLLPRI | verwenden POLLERR Fahnen. Etwas wie das:

%Vor%     
Dan Kruchinin 21.02.2011, 23:47
quelle
4

Die Dokumentation, auf die Sie verwiesen haben, ist nicht korrekt. Um bei Mount-Änderungen mit select() zu warten, sollte der Dateideskriptor /proc/mounts oder /proc/pid/mounts in exceptfds , nicht readfds gesetzt werden. Tauschen Sie einfach das 2. und 4. Argument in Ihrem Programm. Datei-Deskriptoren, die regulären Dateien zugeordnet sind, müssen von POSIX immer lesbar sein.

    
mark4o 21.02.2011 23:36
quelle
1

Um das Hauptbeispiel der Frage zu ergänzen, ist hier ein weiteres Beispiel, das die Bibliotheken GLib und GIO benutzt, um Änderungen zu beobachten, indem /proc/self/mountinfo :

überwacht wird %Vor%     
Nelson 17.09.2017 09:09
quelle
0

Wenn Sie das tun

%Vor%

Sie werden sehen, dass sich die Zeit ändert, was bedeutet, dass Mount-Daten ständig aktualisiert werden, obwohl nicht viel geändert wird. Es sieht also so aus, als ob die aktuelle Methode zur Überwachung von Mounts nicht funktioniert.

    
Zimbabao 21.02.2011 20:39
quelle

Tags und Links