которая сама назначена signal-ом обработать SIGALRM. SIG_DFL, SIG_IGN, fork() и daemon() не помогают. я понимаю, что трабл вызван какими-то ограничениями на вложенность таких функций.
нет ли способа заставить работать?
задача: запускать с заданным периодом потомка, который, однако, должен иметь-таки таймаут.Спасибо!
Если я правильно понял, то вы используете устаревший вариант обработки сигналов - функцию signal. Посмотрите в сторону sigaction - man sigactionКстати, обработку таймаутов можно проводить в отдельном потоке.
>Если я правильно понял, то вы используете устаревший вариант обработки сигналов -
>функцию signal. Посмотрите в сторону sigaction - man sigactionsignal вызывает 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();
}