【问题标题】:Difference(s) between a background process and a daemon in linuxlinux中后台进程和守护进程之间的区别
【发布时间】:2020-04-20 15:09:18
【问题描述】:

后台进程不属于用户和终端,守护进程也不属于。两者的主要区别是什么?如果我要编写一个服务器程序,我应该将它作为后台进程还是守护进程运行?

【问题讨论】:

  • “后台进程不属于用户和终端” - 你是怎么得出这个结论的?

标签: linux server process background-process daemon


【解决方案1】:

当人们说“后台进程”时,它通常是在 shell(如 bash)的上下文中,它实现了job control

当一个进程(或process group)进入后台时,它仍然是shell 创建的会话的一部分,并且仍然与shell 的控制终端有关联。后台进程的标准输入/输出仍将链接到终端(除非明确更改)。此外,根据 shell 的退出方式,它可能会向所有后台进程发送SIGHUP 信号(请参阅this 回答以了解确切时间)。在 shell 终止之前,它仍然是后台进程的父进程。

另一方面,守护进程没有控制终端,通常显式设置为 init 进程的子进程。敢的标准输入/输出通常重定向到/dev/null

【讨论】:

    【解决方案2】:

    后台进程通常指的是这样的进程:

    Another process is its parent; eg, a shell;
    It has standard streams (input, output, error) connected to that parent
    

    最常见的类型是当您运行带有尾随 & 的 shell 程序时。它通常共享 shell 的输出流,但如果它试图从其输入流中读取,它会收到一个信号并停止。

    更重要的是(通常),像这样的后台进程仍然是父进程,因此向该进程组发出的信号将继续发送给它。如果父进程终止,子进程也将收到最有可能终止它们的信号。 (对于大多数用户来说,这可能是两者之间最大的区别。)

    守护进程是:

    Has no parent, ie, its parent process is the system (or container) initial thread, commonly systemd (Linux), init (other Unix), or launchd? (MacOS);
    Typically has its output disconnected, or connected to a log file;
    Typically has its input disconnected.
    

    守护进程通常也被编写为接受“用户挂起”信号 (SIGHUP),如果不处理该信号将终止程序,作为重新读取其配置文件并继续工作的特殊指令。

    大多数情况下,这些进程是由某些系统级工具创建的,它们继续完全独立于用户活动(登录、注销等)运行。自己处理登录(getty 或 gdm 等)以及其他面向网络的服务(Web 服务器、邮件服务器等)的东西可能是守护进程,以及像 cron 或 smartd 这样的自我监控服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 2016-06-27
      • 2015-03-24
      • 2011-03-06
      • 2011-06-19
      相关资源
      最近更新 更多