The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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);




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру