The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Вызов signal (SIGALRM, myfunc) не проходит из функции,"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Вызов signal (SIGALRM, myfunc) не проходит из функции," 
Сообщение от echo emailИскать по авторуВ закладки(??) on 14-Ноя-05, 17:13  (MSK)
которая сама назначена signal-ом обработать SIGALRM. SIG_DFL, SIG_IGN, fork() и daemon() не помогают. я понимаю, что трабл вызван какими-то ограничениями на вложенность таких функций.
нет ли способа заставить работать?
задача: запускать с заданным периодом потомка, который, однако, должен иметь-таки таймаут.

Спасибо!

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "Вызов signal (SIGALRM, myfunc) не проходит из функции," 
Сообщение от dimus emailИскать по авторуВ закладки(??) on 16-Ноя-05, 09:58  (MSK)
Если я правильно понял, то вы используете устаревший вариант обработки сигналов - функцию signal. Посмотрите в сторону sigaction - man sigaction

Кстати, обработку таймаутов можно проводить в отдельном потоке.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Вызов signal (SIGALRM, myfunc) не проходит из функции," 
Сообщение от echo emailИскать по авторуВ закладки(??) on 18-Ноя-05, 12:03  (MSK)
>Если я правильно понял, то вы используете устаревший вариант обработки сигналов -
>функцию signal. Посмотрите в сторону sigaction - man sigaction

signal вызывает sigaction.

>Кстати, обработку таймаутов можно проводить в отдельном потоке.

OK, спасибо, я нашёл способ.
Просто назначить run() с fork-ом внутри перехватывать SIGALRM и сделать
периодичный запуск setitimer(...) было бы красиво.

setitimer(...) ;
signal (SIGALRM, run) ;

for(;;)
      pause();

Всё работает замечательно, но signal(SIGALRM,otherfunc ) в run() не срабатывает. В мане написано, почему.

Я вставил запуск run() в цикл, а SIGALRM перехватываю другой функ.
...
signal (SIGALRM, return_func ) ;

for(;;) {
      run();
      pause();
}


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




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

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