Re[3]: Демоны
От: Kubyshev Andrey  
Дата: 09.10.02 10:48
Оценка: 12 (1)
Здравствуйте Tom, Вы писали:

Tom>[skip]

Tom>Спасибо сегодня попробую. Не могли бы вы прояснить очень не понятный момент: В контексте какого процесса и потока вызываются сигналы (если потоков много и выполняются они на разных процессорах, то как там это работает ?)

Vse tvoi threads poluchat etot signal i ego obrabotayut esli on u nih ne zamaskirovan. Obychno ya delayu tam , pered sozdaniem pervoi thread ili pered deamon , ya maskiruyu signal TERM i HUP

        sigset_t sigs_to_catch;
        sigemptyset(&sigs_to_catch);
        sigaddset(&sigs_to_catch, SIGHUP);
       sigaddset(&sigs_to_catch, SIGTERM);
    pthread_sigmask(SIG_BLOCK, &sigs_to_catch, NULL);



sozdayu pervuyu thread (vmeste s tem sozdaetsya thread manager) i razmaskiruyu eti signaly v main thread, a potom perehozhu na ozhidanie globalnoi condition variable. v obrabotchie HUPa naprimer ya save nomer signala v global variable i signalyu etot condition var i vyhozhu iz obrabotchika.

void myHUPhandler (int s){
    sig_reason = s ;
    sig_cond.broadcast();
}




Main thread prosypaetsya , vidit chto proizoshel signal HUP, perechityvaet konfiguratsiyu i snova zasypaet na condition var ... , nu a esli TERM , to soobschaet threadam chto nado quit putem ustanovki flaga , zhdet poka vyidut i vyhodit ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.