Welcher Prozess benutzt das Modul
Welcher Prozess benutzt das Modul
Hallo,
wenn ich beim Versuch ein Modul zu entladen "FATAL: Module xyz is in use" bekomme: Kann ich dann irgendwie herausfinden, welcher Prozes das Modul noch am nutzen ist?
Achja. Bei einem lsmod steht in der Spalte "User by" eine 1, sonst nichts. Bei anderen Modulen werden hinter der Zahl noch weitere Module aufgelistet.
wenn ich beim Versuch ein Modul zu entladen "FATAL: Module xyz is in use" bekomme: Kann ich dann irgendwie herausfinden, welcher Prozes das Modul noch am nutzen ist?
Achja. Bei einem lsmod steht in der Spalte "User by" eine 1, sonst nichts. Bei anderen Modulen werden hinter der Zahl noch weitere Module aufgelistet.
Re: Welcher Prozess benutzt das Modul
lsof gibt sehr viel aus. Musst mal probieren.
Re: Welcher Prozess benutzt das Modul
lsof zeigt nur auf welche Datei/Gerät ein Prozess zugreift, aber keine Zuordnung zwischen Modulen und Prozessen. Ist so eine Zuordnung im Kernel nicht nachvollziehbar?
Re: Welcher Prozess benutzt das Modul
ein Modul kann auch von Treibern verwendet werden, die statisch in den Kernel gelinkt wurden. z.B der sysfs Treiber referenziert jedes geladene Modul ( das wird allerdings bei der Ausgabe von lsmod bzw /proc/modules und /sys/modules/*/refcnt berücksichtigt und abgezogen )Kermit24 hat geschrieben:
Achja. Bei einem lsmod steht in der Spalte "User by" eine 1, sonst nichts. Bei anderen Modulen werden hinter der Zahl noch weitere Module aufgelistet.
Es kommt halt dann auf das jeweilige Modul drauf an, welche Aktionen nötig sind, damit das Modul entladen werden kann.
z.B beim ipt_LOG Modul müssen die entsprechenden iptables-Regeln gelöscht werden
Prozesse sind hier nicht relevant ( Prozesse verwenden ( in diesem Sinn, also auf das "Used by" bezogen ) keine Module )Kermit24 hat geschrieben:lsof zeigt nur auf welche Datei/Gerät ein Prozess zugreift, aber keine Zuordnung zwischen Modulen und Prozessen. Ist so eine Zuordnung im Kernel nicht nachvollziehbar?
Gruß
gms
Re: Welcher Prozess benutzt das Modul
Ok, verständlich. Mein Problem ist konkret, dass z.B. mein Soundchip plötzlich nicht mehr funktioniert. Es gibt keine Fehlermeldung vom Kernel und Musikstücke scheinen auch fehlerfrei abgespielt zu werden. Nur ich höre nichts mehr (an der Lautstärke liegt es nicht). Wenn ich das Modul entlade und neulade klappt es wieder. Ähnlich verhält es sich auch mit der Wifi-Karte auf meinem Netbook.gms hat geschrieben: ein Modul kann auch von Treibern verwendet werden, die statisch in den Kernel gelinkt wurden. z.B der sysfs Treiber referenziert jedes geladene Modul ( das wird allerdings bei der Ausgabe von lsmod bzw /proc/modules und /sys/modules/*/refcnt berücksichtigt und abgezogen )
Angenommen ich baue einen Treiber nicht als Modul, sondern statisch in den Kernel mit ein: Hätte ich dann eigentlich überhaupt keine Chance mehr die Treiber wieder zu "Reinitialisieren", als den kompletten Kernel neuzustarten (sprich Systemneustart)?
ok, aber die iptables werden ja eh kernelintern abgearbeitet. Dazu muss ja kein weiterer Prozess laufen. Aber ich verstehe was Du meinst.Es kommt halt dann auf das jeweilige Modul drauf an, welche Aktionen nötig sind, damit das Modul entladen werden kann.
z.B beim ipt_LOG Modul müssen die entsprechenden iptables-Regeln gelöscht werden
Seltsam ist nur, dass sobald ich meinen Benutzer nur auslogge (dazu wird X11 dank gdm nicht mal beendet, aber viele andere Prozesse die in der Sitzung des Users liefen), ich auf einer root-Konsole dann ohne Probleme das Modul wieder entladen kann. Deshalb ging ich davon aus, dass irgendein Prozess des Benutzers das Modul "blockiert".
Dann werde ich, wenn der Fehler demnächst noch mal auftritt, wohl oder übel die Prozesse des Benutzers auf gut Glück der Reihe nach killen und so mühsam suchen, an welchen es denn gelegen hat. Ich habe nämlich keine Lust, jedesmal den Benutzer komplett ab- und anzumelden.
Ok, gut (bzw. schlecht) zu wissen.Prozesse sind hier nicht relevant ( Prozesse verwenden ( in diesem Sinn, also auf das "Used by" bezogen ) keine Module )
Trotzdem vielen Dank für die Klärung.
Re: Welcher Prozess benutzt das Modul
Hm, du könntest auch mal unter /sys/module/*/holders/ nachsehen, vielleicht steht da etwas.
Gruß,
Daniel
Gruß,
Daniel
Re: Welcher Prozess benutzt das Modul
Natürlich können auch Prozesse die dateien in /dev offen halten dazu führen, dass das modul nicht entladen werden kann. Bei sound lässt sich das so rausfinden:
So generell zu deinen Problemen: Vllt solltest du angenommen du benutzt einen älteren kernel mal einen neueren Versuchen um deine Probleme zu lösen. Vllt hilft auch eine von diesen optionen http://www.mjmwired.net/kernel/Document ... s.txt#1919 . Jetzt einfach mal so in den Raum gestellt.
Was mir zum sound noch einfällt ist, dass alsa manchmal blockiert (oder zumindest war das früher so), wenn eine andere Anwendung die OSS Emulation nutzt. Vllt also auch mal /dev/dsp mit lsof checken.
Code: Alles auswählen
lsof /dev/snd/*
Auf jeden Fall schwieriger. Zumindest für PCI devices gäbs noch bestimmte sachen mit denen man so einen effekt möglicherweise erzielen könnte: http://www.mjmwired.net/kernel/Document ... fs-bus-pciHätte ich dann eigentlich überhaupt keine Chance mehr die Treiber wieder zu "Reinitialisieren", als den kompletten Kernel neuzustarten (sprich Systemneustart)?
So generell zu deinen Problemen: Vllt solltest du angenommen du benutzt einen älteren kernel mal einen neueren Versuchen um deine Probleme zu lösen. Vllt hilft auch eine von diesen optionen http://www.mjmwired.net/kernel/Document ... s.txt#1919 . Jetzt einfach mal so in den Raum gestellt.
Was mir zum sound noch einfällt ist, dass alsa manchmal blockiert (oder zumindest war das früher so), wenn eine andere Anwendung die OSS Emulation nutzt. Vllt also auch mal /dev/dsp mit lsof checken.
Unix is user-friendly; it's just picky about who its friends are.
Re: Welcher Prozess benutzt das Modul
das "Used By" repräsentiert immer eine direkte Referenz im Kernelspace ( Modul oder statisch gelinkter Treiber ) auf das entsprechende Modul. Durch den Zugriff auf vom Kernel zur Verfügung gestellte Resourcen, kann dieser Zähler aber indirekt erhöht werden.Kermit24 hat geschrieben: Seltsam ist nur, dass sobald ich meinen Benutzer nur auslogge (dazu wird X11 dank gdm nicht mal beendet, aber viele andere Prozesse die in der Sitzung des Users liefen), ich auf einer root-Konsole dann ohne Probleme das Modul wieder entladen kann.
In deinem Fall öffnet ein Prozeß einen Filehandle auf eine Gerätedatei. Die Gerätedatei ist wiederum einem Device und dieses wiederum einem Treiber/Modul zugeordnet.Kermit24 hat geschrieben:lsof zeigt nur auf welche Datei/Gerät ein Prozess zugreift, aber keine Zuordnung zwischen Modulen und Prozessen. Ist so eine Zuordnung im Kernel nicht nachvollziehbar?
Praktisch kannst du daher, über das erwähnte lsof, die Zuordnung Prozeß zu Gerätedatei und so wiederum zum entsprechenden Modul herstellen, theoretisch gibt es diese Zuorndung jedoch nur mehr über den Filehandle ( die Gerätedatei muß nicht mehr existieren, bzw muß die geöffnete Gerätedatei auch nicht umbedingt in /dev liegen ).
Gruß
gms
Re: Welcher Prozess benutzt das Modul
So einfach ist es leider nicht. Das erste, was ich getan habe, war mit lsof nach /dev/dsp zu suchen (mit grep). Erfolglos. Dann habe ich nur nach /dev/ geschaut. Aber ich kann mich nicht erinneren irgendwas mit /dev/snd/* gesehen zu haben.gms hat geschrieben: In deinem Fall öffnet ein Prozeß einen Filehandle auf eine Gerätedatei. Die Gerätedatei ist wiederum einem Device und dieses wiederum einem Treiber/Modul zugeordnet.
Praktisch kannst du daher, über das erwähnte lsof, die Zuordnung Prozeß zu Gerätedatei und so wiederum zum entsprechenden Modul herstellen, theoretisch gibt es diese Zuorndung jedoch nur mehr über den Filehandle ( die Gerätedatei muß nicht mehr existieren, bzw muß die geöffnete Gerätedatei auch nicht umbedingt in /dev liegen ).