unix的c守护进程()不能用于sleep()

时间:2014-01-03 13:59:29

标签: c sleep daemon

我有非常简单的代码应该在后台运行,凌晨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)但是使用整个空闲内存所以我需要睡眠功能来停止循环并每十秒重新检查一次,但是睡眠功能程序在我运行后立即停止。

2 个答案:

答案 0 :(得分:1)

如果您正在编写C代码,请不要使用C ++标头(ctimecstdlib)。将这些#include替换为#include <stdlib.h>#include <time.h>。如果这个代码的行为与您描述的一样(我会发现令人惊讶),那么这可能就是错误的来源。

答案 1 :(得分:1)

当然会立即退出。这就是使用daemon的重点。查看ps,您会看到您的proram现在仍在单独运行。

查看man page了解daemon的工作原理。