Добрый вечер.
С помощью lsmod можно выяснить какой модуль используется системой.
Подскажите пожалуйста как узнать какие процессы используют модуль?
То есть
$ lsmod|grep -E 'i915|Modu'
Module Size Used by
i915 354884 3
drm_kms_helper 33008 1 i915
intel_agp 33976 2 i915
drm 221762 4 i915,drm_kms_helper
i2c_algo_bit 6728 1 i915
button 6989 1 i915
video 25256 1 i915
Вижу что i915 кем то трижды используется. Как узнать, кто эти трое?
Один понятное дело Xorg, а кто ещё?
Как узнать кто использует модуль ядра?
lsmod лишь выводит на экран в удобном для чтения виде содержимое /proc/modules
согласного данному описанию, то что вы воспринимаете как "процессы используемые модуль" таковым не является, ибо
The third column lists how many instances of the module are currently loaded. A value of zero represents an unloaded module.
Да, вы правы. Но кто-то этот модуль использует...
Вот очевидный пример, того как модуль явно используется процессом.
Запускаю скрипт
lsmod|grep snd_hda_intel|head -1
cat /dev/dsp >/dev/null &
lsmod|grep snd_hda_intel|head -1
kill %1
sleep 1
lsmod|grep snd_hda_intel|head -1
Обрезанная версия вывода с пояснениями.
snd_hda_intel 28557 0 -- Модуль не используется
snd_hda_intel 28557 1 -- Модуль используется, cat проецссом /dev/dsp
snd_hda_intel 28557 0 -- После kill/sleep, модуль снова не используется
Собственно, мне нужно найти PID вот этого самого cat, который использовал
модуль. Я уверен, что такой способ есть, просто не знаю как это сделать.
Может кто-то всерьёз озадачивался отладкой модулей и знает как это найти...
Данный модуль экспортирует символьное устройство (/dev/dsp). При операциях чтения/записи в данное устройство будут использоваться соответствующие функции модуля, отсюда получаем, что задействован один экземпляр модуля...
Однако, приложение использующее модуль может использовать вызов ioctl для прямого обращения к функциям модуля, более того модуль может быть использован другими подсистемами ядра и, как вы понимаете, все это влияет на кол-во экземпляров модуля ;-)