Написал небольшую програмку с использованеим сигналов. В 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 следующему дочернему процессу, тот тоже выводит символ и сигнализирует родительскому. Вот такой вот цикл.
Не вполне понял, что вы пытаетесь сделать, но вы в конце обработчика вызываете exit и процесс (хоть родительский, хоть дочерний), разумеется, завершается. И что здесь не так?
>Не вполне понял, что вы пытаетесь сделать, но вы в конце обработчика
>вызываете exit и процесс (хоть родительский, хоть дочерний), разумеется, завершается. И
>что здесь не так?Чуть чуть не то написал) В конце нету эксита. Понять в чем проблема не могу...
> 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);