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, 04:45 , 23-Окт-09 (1)
Не вполне понял, что вы пытаетесь сделать, но вы в конце обработчика вызываете exit и процесс (хоть родительский, хоть дочерний), разумеется, завершается. И что здесь не так?
- Signal в Ubuntu 6x-9x, Hromonin, 13:47 , 25-Окт-09 (2)
>Не вполне понял, что вы пытаетесь сделать, но вы в конце обработчика >вызываете exit и процесс (хоть родительский, хоть дочерний), разумеется, завершается. И >что здесь не так? Чуть чуть не то написал) В конце нету эксита. Понять в чем проблема не могу...
- Signal в Ubuntu 6x-9x, const86, 17:01 , 27-Окт-09 (3)
> 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);
|