Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 00:35 07.07.25 
Компютри и Интернет
   >> Програмисти
*Кратък преглед

Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | (покажи всички)
Тема Сигнали под Линукснови  
Автор Герисъм (корав оптимист)
Публикувано13.10.15 11:46



Привет! Да ви върна малко към професионални въпроси :)

Може да сте разглеждали вече подобен проблем, аз минавам доста рядко и със сигурност съм го пропуснал. Така че ако има подобна тема, само ме насочете към нея.

Аз пиша основно под Виндовс. Сега ми се наложио спешно да префасонирам и подкарам един гигантски проект под Линукс, Ubuntu. Всичко си е ок, с изключение на следното.

Програмата обработва екстрените ситуации по стандартен начин. Навсякъде където трябва има капанчета от рода на
try {
......
}
catch (exception1&...
catch (exception2&...
catch(...) {...}

Под Виндовс всичко си е перфектно. Под Линукс обаче има и сигнали, които не се ловят от тези капани, например SIGBUS и подобни. Проблемът е как да прекарам и такива сигнали (избран набор, не всички) да се насочат да се ловят от някой catch по-горе, за да може всичко да си мине по реда - да се извикат съответните деструктори на обекти и да се освободят нужните ресурси доколкото може и да се вземе нужното решение какво да се прави. Идеята е това да стане с минимални доработки на горният механизъм, а не цялостната му замяна. Целта е приложението да работи 24/7, като в краен случай да се саморестартира интелигентно. Нужно е това да работи коректно и в многонишков контекст.

В общият случай капаните от горният тип са вложени един в друг, тоест в тялото на try{} някъде навътре има подобна конструкция, ловяща същото или подобно.

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



Успехи!

За разлика от главата, стомахът се усеща когато е празен...

Тема Re: Сигнали под Линукснови [re: Герисъм]  
Автор rabin (чобанин)
Публикувано13.10.15 11:57



С какви права ти върви приложението? Хардуерията при разработка си иска root, аз поне нямам нерви да ходя на всеки порт поотделно да му админвам достъпа.

Zaphod: - Не се мъчи да разсъждаваш



Тема Re: Сигнали под Линукснови [re: Герисъм]  
Автор PekoHcTpykTop (дарвинист)
Публикувано13.10.15 11:59





И не правильно думать, что есть чьим-то богом обещанный рай...

Тема Re: Сигнали под Линукснови [re: PekoHcTpykTop]  
Автор Герисъм (корав оптимист)
Публикувано13.10.15 13:20



Гледах ги вече тези примери, и подобни на тях.

Конструкцията която дискутира автора на въпроса в линка е най-близо до ума, макар и да се оказва неправилна и неработеща (а и throw там се вика в неизвестен контекст). Конструкцията която предлага последният отговор (1 по номерацията) работи, но само в ограниченият вариант на примера. В примера throw се вдига в контекста на нивото на try блока, тоест обработката ще активира конструкторите на това ниво и надолу. Но ако в try е извикана функция fun1(), заела ресурси, и тя вика функция fun2() в която се активира сигнала, в тоя пример няма да се викат деструкторите във fun1() и fun2(), а само на нивото на try. За да работи както се предлага, всяка функция трябва да се облече със свое повикване на signal(), setjmp() и try-catch блок, което е прекалено. Самият компилатор прави подобно скрито обличане за нормалните ексцепшъни, ама на ръка да го повтаряш само заради сигналите, не ми дава сърце. Над 16000 функции има в проекта, поне 10000 ще са потенциално засегнати...

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

За разлика от главата, стомахът се усеща когато е празен...


Тема Re: Сигнали под Линукснови [re: rabin]  
Автор Герисъм (корав оптимист)
Публикувано13.10.15 13:21



Правата в случая нямат значение, нищо насилствено не се прави с хардуер. Основно файлови операции.

За разлика от главата, стомахът се усеща когато е празен...


Тема Re: Сигнали под Линукснови [re: rabin]  
Автор jeffty (chupac)
Публикувано13.10.15 14:47





Мали тоя с помиярите Сизър Милан как не мога да го дишам, а все него повтарят

Тема Re: Сигнали под Линукснови [re: rabin]  
Автор gat3way (altered mind)
Публикувано13.10.15 16:09



Защо сам си го причиняваш това?

EOF


Тема Re: Сигнали под Линукс [re: Герисъм]  
Автор rgr9 (ентусиаст)
Публикувано13.10.15 16:13



Има версия на сигнал хандлера който ти дава контекста от където е извикан но не съм сигурен че поддържа неща като avx. Работи със sigill за sigbus не знам.

Man 2 sigaction

Но ще трябва да използваш асемблер.
Дава ти контекста /регистрите/ като втори аргумент на хандлера
Ако правилно съм те разбрал четеш файлове в памет с mmap.
Това значи че докато си мапнал файла го отсичаш, което е доста вероятно да е някаква грешка в програмата.

Редактирано от rgr9 на 13.10.15 16:57.



Тема Re: Сигнали под Линукснови [re: gat3way]  
Автор rabin (чобанин)
Публикувано13.10.15 16:36



Koe да си причинявам? Като не си с рут права много неща не вървят. Дори някои игри.

Zaphod: - Не се мъчи да разсъждаваш



Тема Re: Сигнали под Линукснови [re: rabin]  
Автор evlampi_popdimitrov (световноизвесен)
Публикувано13.10.15 16:39



Оу, тва беше много силно мнение, хохохохо.

А към оригиналния въпрос - ексепшъните в ц++ са отделен механизъм от сигналите и разни други като setjump/longjump и SEH в уиндоуса и е рецепта за яко мазаница и главоболия да се мешат. По-скоро може би е добра идея разни специфични платформени неща да се изолират в кода като отделни модули и евентуално доколкото може някъв общ интерфейс за обвивка, за да се изолира платформено-специфичния код. Ключовото е ИЗОЛИРА, има бая заблудени идеалисти дето се хвърлят да го елиминират, което е загубена кауза.

I have sold less books on sex than Stephen Hawking has on physics -- Madonna



Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.