Как предотвратить сбой в плагине, влияющий на основную программу (dlopen)

Я делаю плагин-систему с «dlopen» в Linux. есть центральное приложение, которое передает данные (JSON) между плагинами. Мы можем обрабатывать выброшенные исключения, используя предложение try-catch. Мой вопрос касается ошибок, которые завершают работу программы, например ошибка сегментации. Как я могу предотвратить ошибку сегментации в одном из плагинов, чтобы завершить работу всего приложения?

Могу ли я что-то сделать с вилкой? Я никогда не использовал вилку, и я не знаю, могу ли я передавать данные между разветвленным процессом и основным процессом? Или я не могу использовать dlopen для такой вещи, и я должен использовать другой метод?

Спасибо.


person ajlajlajl    schedule 08.08.2015    source источник
comment
Вы не можете легко отделить обработку сигналов, если вообще сможете. Обработчики сигналов распространяются на весь процесс, поэтому, даже если вы использовали sigsetjmp/siglongjmp для обработки SIGSEGV, например, в своем коде, вы по-прежнему влияете на весь процесс — вместе с тем, что весь процесс влияет на ваш код.   -  person Andrew Henle    schedule 08.08.2015


Ответы (1)


Насколько я знаю, единственный способ обезопасить себя — запускать плагины в отдельных процессах и взаимодействовать с ними через каналы, сокеты и т. д.

вы используете json, поэтому ваши данные уже сериализованы, вам нужно написать загрузчик, который открывает плагин и работает с уже существующими сокетами.

person Jasen    schedule 09.08.2015
comment
да, я тоже думаю о розетках. Я просто хотел посмотреть, есть ли способ обойти сигналы... - person ajlajlajl; 09.08.2015
comment
внеполосная сигнализация возможна на сокетах. Я не уверен в деталях. - person Jasen; 09.08.2015