Как да предотвратите срив в плъгин да засегне основната програма (dlopen)

Създавам плъгин система с „dlopen“ в linux. има централно приложение, което прехвърля данни (JSON) между плъгини. Можем да обработваме хвърлени изключения, като използваме клауза try-catch. Въпросът ми е за грешки, които прекратяват програмата, като Segmentation fault. Как мога да предотвратя грешка в сегментирането в един от плъгините да прекрати цялото приложение?

Мога ли да направя нещо с вилица? Никога не съм използвал fork и не знам дали мога да прехвърлям данни между разклонен процес и основен процес? Или не мога да използвам dlopen fr подобно нещо и трябва да използвам друг метод?

Благодаря.


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


Отговори (1)


AFAIK Единственият начин да бъдете в безопасност е да стартирате добавките в отделни процеси и да комуникирате с тях по канали или сокети и т.н.

използвате json, така че вашите данни вече са сериализирани, ще трябва да напишете товарач, който отваря плъгина и се занимава с предварително съществуващите сокети.

person Jasen    schedule 09.08.2015
comment
да, и аз мисля за гнезда. Просто исках да видя дали има начин да заобиколя сигналите ... - person ajlajlajl; 09.08.2015
comment
извънчестотната сигнализация е възможна на гнезда. Не съм сигурен в подробностите. - person Jasen; 09.08.2015