Linux, signals, application restart

User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Linux, signals, application restart

Post by A. Fig Lee »

Мужики, пока я (ням-ням..).. ем .. пельмени..
Задача..
Вдруг кто (ням-ням..) сталкивался (буль-буль-буль..)...
Короче..
Такая ситуация.
У меня есть аппликейшн которую надо рестартовать каждый день.
Она использует шаред мемори.
Другая аппликейшн контролирует статус етой первой черех ту же шеред мемори.
Первая, когда стартует убирает старый кусок шеред мемори (так надо!)
и создате новый, к которому вторая аппликейшн (может быть несколько)
присасывается и наблюдают че там происходит..
Проблема: хочется автоматичски рестартовать 1-ю аппликейшн каждый день.
Онако, мне чтоб рестартануть первую, мне надо детачать от шеред
мемори всех клиентов, иначе я не могу делит шеред мемори.
Делаю так:
из скрипта посылаю SIGUSR1
всем кто смотрит шеред мемори.
По получению сигнала исполняется ехецв, запускающий самого себя,
я там передаю параметер - " поспи немниги, секуд 10, пока главная аппликация
поп-апнется, а потом аттачайся к шеред мемори".
На Солярке все пашет.
На Линухе - нет..думаю, так как я никогда вернулся с сигнал хендлера,
кернел блокает все последующие сигналы..
(I'm executing execv from signal handler - I did add
call to set hanlder for SIGUSR1 to the same function, but did not work out..)
Пробовал вернутся из сигнал хендлера и сетапнуть глобал вариейбл.
Получил 1 дополнительный роунд.
То есть обычно второй kill ни к чему не приводит, тут - 3-й.
Еще не разобрался.
Никто не сталкивался?

P.S. I think nobody uderstoosd anything anyway..
Верить нельзя никому - даже себе. Мне - можно!
Hatih
Уже с Приветом
Posts: 750
Joined: 10 Dec 2003 20:11

Post by Hatih »

А зачем перезапускать аппликацию? shmdt ей, и потом shmat. Можно по семафору, поднимаемому первой аппликацией - а то 10 секунд как то грязновато - обычно много, но иногда может и нехватить.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Hatih wrote:А зачем перезапускать аппликацию? шмдт ей, и потом шмат. Можно по семафору, поднимаемому первой аппликацией - а то 10 секунд как то грязновато - обычно много, но иногда может и нехватить.


не работает ето.
Первое что я сделал - shmdt.
пока процесс жив, кусок шеред мемори удалить нельзя - физически он показывается с
ipcs
Семафоры с детства не люблю... Хотя может быть подумать над етим...
К тому же копий оф аппликаций может быть неопределенное количество..
Да, семафор может быть, наверное..
Анивей, проблему я сольвнул.
Таки да, на Линухе если из сигнал хендлера не вернулся - больше их не получишь.
Верить нельзя никому - даже себе. Мне - можно!
Hatih
Уже с Приветом
Posts: 750
Joined: 10 Dec 2003 20:11

Post by Hatih »

A. Fig Lee wrote:Таки да, на Линухе если из сигнал хендлера не вернулся - больше их не получишь.


Это интересно, надо запомнить. А если перед этим fork()-нуться? Или даже vfork()-нуться?
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Hatih wrote:
A. Fig Lee wrote:Таки да, на Линухе если из сигнал хендлера не вернулся - больше их не получишь.


Это интересно, надо запомнить. А если перед этим форк()-нуться? Или даже вфорк()-нуться?


Я не пробовал етот вариант на ЛИнухе..
На Соларке пробовал, но чето не очень получалось, какаято хаотичная реакция.
Апликация использует curses..
Иногда вообще терминал закроется...
А процесс висит ..
Причину достоверно не исследовал.
Верить нельзя никому - даже себе. Мне - можно!

Return to “Вопросы и новости IT”