Найти, какую программу обращалось к модулю ядра

На моей странице man написано:

$0 : расширяется до имени shell или shell script.

Похоже, это переводится как argv[0] текущей оболочки - или первый неоперанд аргумент командной строки, который интерпретируемая в данный момент оболочка получает при вызове. Ранее я утверждал, что sh ./somescript передаст свою $0 $ENV переменную в sh но это было неверно, поскольку shell является новым процессом и вызывается с новым $ENV.

Таким образом sh ./somescript.sh отличается от . ./somescript.sh который запускается в текущем окружении и $0 уже установлен.

Вы можете проверить это, сравнив $0 с /proc/$$/status.

echo 'script="/proc/$$/status"
    echo $0
    cat "$script"' \
    > ./script.sh
sh ./script.sh ; . ./script.sh

Спасибо за исправление, @toxalot. Я кое-чему научился.

3
21.11.2018, 06:40
1 ответ

Обычно для этого нет лог-файла. Однако есть инструменты, которые вы можете использовать для его создания!

Ядро имеет встроенную -точку трассировки для функции try _модуля _get (). Это функция, которая увеличивает счетчик ссылок модуля. Эта точка трассировки находится в подсистеме moduleи называется module_get.

https://stackoverflow.com/questions/448999/is-there-a-way-to-figure-out-what-is-using-a-linux-kernel-module/449856(длинное чтение ).

Для начала попробуйте perf trace -a --no-syscalls -e module:module_get -e module:module_put. Это показывает имя программы, но не показывает PID .

2
27.01.2020, 21:24

Теги

Похожие вопросы