URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8486
[ Назад ]

Исходное сообщение
"Signal в Ubuntu 6x-9x"

Отправлено Hromonin , 22-Окт-09 19:26 
Написал небольшую програмку с использованеим сигналов. В 6х версии все отлично работает, но в другой(более новой, предположительно 9х) возникает проблема, после первой обработки сигнала, оброботчик "отсоединяется"... И вместо оброботки на экран выплывает сообщение аля "Установленный пользователем сигнал 2" и вылет.
Обработчик устанавливаю так:
void sign1_handler(int i )
{
printf("signsign");
blablabla
exit(EXIT_SUCCESS);
}

    struct sigaction sa;
    sigset_t newset;
    sigemptyset(&newset);
    sigaddset(&newset,SIGUSR1);
    sa.sa_handler=sign1_handler;
    sigprocmask(SIG_BLOCK,&newset,0);
    sigaction(SIGUSR2,&sa,0);

С чем это может быть связанно не представляю, к этой "более новой версии" доступа в ближайшие пару дней не предвидится. Так что навсякий случай опишу как используются сигналы(всяко ведь бывает):

Родительский процесс следит за выполнением дочерних. Каждый дочерний процесс с помощью ф-ии sig_wait ожидает сигнала SIGUSR1, после чего выводит символ в консоль и посылает сигнал SIGUSR2 в родительский. После чего оброботчик sign1_handler в родительском перехватывает это сигнал и посылает сигнал SIGUSR1 следующему дочернему процессу, тот тоже выводит символ и сигнализирует родительскому. Вот такой вот цикл.


Содержание

Сообщения в этом обсуждении
"Signal в Ubuntu 6x-9x"
Отправлено jd , 23-Окт-09 04:45 
Не вполне понял, что вы пытаетесь сделать, но вы в конце обработчика вызываете exit и процесс (хоть родительский, хоть дочерний), разумеется, завершается. И что здесь не так?

"Signal в Ubuntu 6x-9x"
Отправлено Hromonin , 25-Окт-09 13:47 
>Не вполне понял, что вы пытаетесь сделать, но вы в конце обработчика
>вызываете exit и процесс (хоть родительский, хоть дочерний), разумеется, завершается. И
>что здесь не так?

Чуть чуть не то написал) В конце нету эксита. Понять в чем проблема не могу...


"Signal в Ubuntu 6x-9x"
Отправлено const86 , 27-Окт-09 17:01 
>    struct sigaction sa;
>    sigset_t newset;
>    sigemptyset(&newset);
>    sigaddset(&newset,SIGUSR1);
>    sa.sa_handler=sign1_handler;
>    sigprocmask(SIG_BLOCK,&newset,0);

Распечатай здесь sa.sa_flags. Нет ли в нём SA_RESETHAND?
>    sigaction(SIGUSR2,&sa,0);