【问题标题】:linux : close or redirect standard output to /dev/null after detaching from terminallinux:从终端分离后关闭或重定向标准输出到 /dev/null
【发布时间】:2016-01-20 22:29:19
【问题描述】:

我们有一个基于http://www.itp.uzh.ch/~dpotter/howto/daemonize 上的实现与终端分离的 linux 代码。

这里有一个代码 sn-p :

....
freopen( "/dev/null", "r", stdin);
freopen( "/dev/null", "w", stdout);
freopen( "/dev/null", "w", stderr);

kill( parent, SIGUSR1 );
}

我可以通过以下方式关闭标准文件描述符,而不是重定向到 /dev/null 并获得相同的结果:

close(STDIN_FILENO);     
close(STDOUT_FILENO); 
close(STDERR_FILENO);

现在,我对使用什么方法有点困惑:重定向还是关闭?每种方法的潜在问题是什么?

【问题讨论】:

    标签: c linux terminal daemon dev-null


    【解决方案1】:

    您也可以这样做,但重定向到 /dev/null 更安全、更容易。

    如果您选择关闭,则必须确保您调用的任何外部程序或库在 stdin/stdout/stderr 关闭时仍然有效。库和框架的处理方式不同:

    • Shell 脚本可能会因echo 意外返回不成功而中止或行为异常。
    • 在写入底层缓冲区时,Python 程序将看到任意打印语句失败并出现异常。
    • Ruby 会忽略它。

    即使您调用的程序或库通常不打印任何内容,您也不知道它们执行什么样的条件日志记录以及它们如何处理那里的故障。

    除非已知您运行的所有代码都可以处理没有标准 i/o,否则最好只重定向。

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多