Linux中后台进程和守护进程的区别。

3

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


后台进程不属于用户和终端 - 你是如何得出这个结论的? - root
2个回答

7
当人们说“后台进程”时,通常是在shell(如bash)的上下文中,它实现了作业控制
当一个进程(或进程组)被放到后台时,它仍然是由shell创建的会话的一部分,并且仍然与shell的控制终端相关联。后台进程的标准输入/输出仍将链接到终端(除非明确更改)。此外,根据shell的退出方式,它可能会向所有后台进程发送SIGHUP信号(请参见this答案以了解确切时间)。在shell终止之前,它仍然是后台进程的父进程。
另一方面,守护进程没有控制终端,并且通常明确地成为init进程的子进程。守护进程的标准输入/输出通常重定向到/dev/null

5

后台进程(Background process)通常指的是以下过程:

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这样的自我监控服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接