在程序'progX'的开头有以下代码是否有区别
if(daemon(0, 0) == -1)
{
printf("daemon error: %s", strerror(errno));
}
或通过以下命令运行'progX':progX& 2> / dev / null 1> / dev / null 0> / dev / null
答案 0 :(得分:5)
daemon()
做了几件事:
init
。查看ps
列表,您将看到守护进程归PID 1所有。setsid()
。/
。/dev/null
。您的重定向处理最后一个操作,但不处理其余操作。
答案 1 :(得分:1)
progX & 2>/dev/null 1>/dev/null 0>/dev/null
stdin(0)是一个输入。不输出。守护进程启动应该关闭0,1,2 - 实际上所有打开的文件描述符就在它从父进程中分离之后。所以我不明白你为什么要将来自守护进程启动的错误消息重定向到/ dev / null。
这样做会阻止您从ProgX获得的任何消息。只是在编写ProgX时运行它是一个更好的主意。
fprintf(stderr, "daemon error %s\n", strerror(errno));
可能会更好 - 错误转到stderr,printf输出到stdout。
答案 2 :(得分:0)
daemon chdirs to / 守护进程关闭所有fds
所以你需要
cd /
progX ....
它是相同的