c - 为什么要在守护程序启动期间将 STDIN、STDOUT、STDERR 重定向到/dev/null?

标签 c unix daemon

我在 SO 中看到了 how to redirect STDIN, STDOUT, STDERR to /dev/null in C 。 这是在守护进程启动期间完成的。但是,为什么这对于正确启动 unix/linux 守护进程是必要的?

奖励问题:

如果 STDOUT 关闭并且在不重新打开的情况下使用文件描述符会怎样?

最佳答案

stdinstdoutstderr 已关闭,以便守护进程可以从启动它的 tty 成功分离,并且守护进程(或其子进程)在运行时不会写入 tty。

如果您尝试从一个关闭的文件描述符读取/写入,操作将失败并且 errno 将设置为 EBADF(“fildes 不是有效文件或套接字描述符打开以供读取")。除此之外,不会有任何不愉快的事情发生。

关于c - 为什么要在守护程序启动期间将 STDIN、STDOUT、STDERR 重定向到/dev/null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492672/

相关文章:

c - wait() 不会等待每个 child

c - 创建现代 OpenGL 上下文是否需要假上下文?

使用 execl 和 fork() 在 C 中创建 linux 环境

perl - 无法在未引用的引用上调用 “capture2”方法

在 Linux 中创建守护进程

c - 以下代码有问题

linux - shell 如何找到/etc/passwd 中的最后一个条目

c - C中通过unix系统命令打开图像文件

MySQL 守护进程拒绝以 "Can' 启动服务器 : Bind on TCP/IP port: Address already in use"(it's not).

ruby-on-rails - 从 ruby​​ 守护进程中调试 osascript 执行