c daemon() для unix не работает со sleep()

У меня есть очень простой код, который должен работать в фоновом режиме и в час ночи выключать компьютер:

#include <ctime>
#include <cstdlib>
#include <unistd.h>

int main() {
    time_t t;struct tm * now;
    daemon(0,0);
    while(1){
        t = time(0);
        now = localtime( & t );
        if(now->tm_hour==1){
           system("shutdown -P");
           break;
        }
        sleep(10);
    }
    return 0;
} 

Код работает без сна (10), но использует всю свободную память, поэтому мне нужна функция сна, чтобы остановить цикл и перепроверить время каждые десять секунд, но с функцией сна программа останавливается сразу после ее запуска.


person Ruli    schedule 03.01.2014    source источник
comment
Откуда ты знаешь, что он останавливается? Вы вызываете daemon(), чтобы он работал в фоновом режиме и не потреблял никаких заметных ресурсов/ЦП.   -  person nos    schedule 03.01.2014
comment
Проверьте возвращаемое значение daemon()   -  person Chinna    schedule 03.01.2014
comment
Кстати, знаете ли вы, что в shutdown уже есть функция, которую вы реализуете? (shutdown -P 01:00)   -  person rodrigo    schedule 03.01.2014


Ответы (2)


Если вы пишете код C, не используйте заголовки C++ (ctime, cstdlib). Замените эти #include на #include <stdlib.h> и #include <time.h>. Если поведение этого кода действительно так, как вы описываете (что мне показалось бы удивительным), то, вероятно, это и есть источник ошибки.

person Andrey Mishchenko    schedule 03.01.2014
comment
Конечно, это должно было вызвать проблему, потому что теперь она работает, спасибо. - person Ruli; 03.01.2014

Конечно, он сразу выходит. В этом весь смысл использования daemon. Проверьте с помощью ps, и вы увидите, что ваш proram все еще работает как отдельный процесс.

Посетите справочную страницу, чтобы узнать, как работает daemon.

person Devolus    schedule 03.01.2014