Здравствуйте 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 ...