На моей странице 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. Я кое-чему научился.
Обычно для этого нет лог-файла. Однако есть инструменты, которые вы можете использовать для его создания!
Ядро имеет встроенную -точку трассировки для функции 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 .