URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4840
[ Назад ]

Исходное сообщение
"Вызов signal (SIGALRM, myfunc) не проходит из функции,"

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

Спасибо!


Содержание

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

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


"Вызов signal (SIGALRM, myfunc) не проходит из функции,"
Отправлено echo , 18-Ноя-05 12:03 
>Если я правильно понял, то вы используете устаревший вариант обработки сигналов -
>функцию 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();
}