Я использую luajit2.0.4 в качестве интерпретатора lua. вот ситуация:
после того, как я загружу динамическую библиотеку, например cjson.so, с помощью
cjson = require('cjson')
a=cjson.new() -- blahblah... do things i want
затем мне нужно перезаписать файл lib (ситуация горячего обновления, и здесь cjson.so_1 и cjson.so могут быть одинаковыми)
[root@localhost lib]# cp cjson.so_1 cjson.so
cp: overwrite `cjson.so'? y
это заставит ядро обрезать физическую память pmap cjson.so и приведет к отсутствию страницы, когда я вызову
a=cjson.new()
ядро снова скопирует библиотеку cjson.so в память, на этот раз не анализируя глобальные символы. поэтому, когда я вызываю new(), который должен вызывать внешние функции, такие как malloc(), возникает ошибка сегмента.
Я уже нашел способ перезагрузки, написав функцию выгрузки на C,
и мой вопрос: могу ли я сделать это с помощью самого кода lua?
lua
является интерпретируемым языком. U,e, его библиотека используется, поэтому попытка выгрузить библиотеку вызовомlua
синтаксиса, который интерпретируется и выполняется библиотекой в это время, невозможна. - person ryyker   schedule 15.11.2017