【问题标题】:c daemon() for unix doesnt work with sleep()c daemon() for unix 不适用于 sleep()
【发布时间】:2014-01-03 13:59:28
【问题描述】:

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

【问题讨论】:

  • 你怎么知道它停止了?您调用 daemon() 以便它将自己置于后台,并且不会消耗任何明显的资源/CPU。
  • 查看daemon()的返回值
  • 附带说明,您知道shutdown 已经拥有您正在实施的功能吗? (shutdown -P 01:00)

标签: c sleep daemon


【解决方案1】:

如果您正在编写 C 代码,请不要使用 C++ 标头(ctimecstdlib)。将那些#includes 替换为#include &lt;stdlib.h&gt;#include &lt;time.h&gt;。如果这段代码的行为真的如你所描述的那样(我会感到惊讶),那么这可能是错误的根源。

【讨论】:

  • 当然这一定会导致问题,因为现在它运行了,谢谢。
【解决方案2】:

当然它会立即退出。这就是使用daemon 的全部意义所在。检查ps,您会看到您的程序现在仍然作为一个单独的进程运行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2016-10-31
    相关资源
    最近更新 更多