Народ, подскажите путь, при помощи чего или как сделать чтобы мой демон через каждые 5 минут делал дело? например при помощи перехвата прерывания или еще какието способы есть?
for(;;){
sleep(5);
delo();
}
гм )) это точно )) пора в отпуск )))... ну а еще есть варианты или это самый рациональный?
>гм )) это точно )) пора в отпуск )))... ну а еще
>есть варианты или это самый рациональный?1. Их ... миллион ... всё от потребностей зависит.
2. Но самые простые, без изысков, способы - будут все: использовать службу времени, как показано выше или напр.так:while( true ) alarm( 5 );
- а обработчик SIGALARM ... делает дело.Или ещё проще, делают: единичеый alarm( 5 ), а последующие взводятся прямо в обработчике...
ок, спасибо.
Только стоит уточнить - не sleep(5) или alarm(5), а sleep(300) или alarm(300). Нужно же каждые "5 минут" :)
>>гм )) это точно )) пора в отпуск )))... ну а еще
>>есть варианты или это самый рациональный?
>
>1. Их ... миллион ... всё от потребностей зависит.
>2. Но самые простые, без изысков, способы - будут все: использовать службу
>времени, как показано выше или напр.так:
>
>while( true ) alarm( 5 );
>- а обработчик SIGALARM ... делает дело.
>
>Или ещё проще, делают: единичеый alarm( 5 ), а последующие взводятся прямо
>в обработчике...
Вообще в линуховых доках по сигнальным обработчикам не рекоммендуецца в эти самые обработчики ничего, кроме атомарных операций совать (типа приравнивания или инкремента переменной, к примеру). А уж если параллельно юзаюцца треды, то не тока не рекоммендуецца, а прямо-таки запрещаецца ;)
Нельзя использовать setitimer совместно с sleep, приведет к неправильной работе. Почему ?! Читайте документацию.
Лучше не использовать такого демона, который висит ничего не делая целых пять минут, и только пару минут работает, для этого используйте at или cron, так будет правильнее.
А ежели вы используете timer и делаете ДЕЛО в обработчике сигнала, то таймер на время обработки нужно деактивировать, чтобы избежать получения от него сигнала во время ДЕЛА. А так же задуматься, что демон будет делать, пока он сигнал не получил, ведь sleep с таймером работать не будет. (вернее будет, но таймер работать будет очень неправильно)
Советую:man at; man cron; man crontab; man sleep; man setitimer;