在程序中调用守护进程(0,0)和启动程序在后台并重定向它的输出是否有区别?

Tre*_*e77 2 c linux

在程序'progX'的开头有下面的代码是否有区别?

if(daemon(0, 0) == -1)
{
    printf("daemon error: %s", strerror(errno));
}
Run Code Online (Sandbox Code Playgroud)

或通过以下命令运行'progX':progX&2>/dev/null 1>/dev/null 0>/dev/null

Joh*_*ica 5

daemon() 做了几件事:

  • init通过分叉然后退出父母来重新使用该过程.查看ps列表,您将看到守护进程归PID 1所有.
  • 打电话setsid().
  • 将目录更改为/.
  • 将标准输入,输出和错误重定向到/dev/null.

您的重定向处理最后一个操作,但不处理其余操作.