c daemon() за unix не работи със sleep()

Имам много прост код, който трябва да работи във фонов режим и в 1 сутринта да изключи компютъра:

#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(), така че да се постави на заден план и да не консумира забележими ресурси/CPU.   -  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). Заменете тези #includes с #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