常规进程(如 Firefox、gimp、skype 等)和服务(httpd、mysqld 等)之间有什么区别?显然,服务的功能不同,但我真的很想知道在操作系统层面上到底发生了什么?它们是否以不同的方式处理?
答案1
从本质上讲,服务就是普通的进程。它们的区别在于它们的作用和启动方式(但这不是一个固定的定义)。服务通常没有用户界面,通常在系统启动时启动并在后台运行,监听来自其他程序或通过网络的请求。这样的进程被称为守护进程在unix世界中。
有一个更一般的定义服务这更具概念性:服务是计算机提供的功能。此定义大致与命令管理的内容相匹配service
。许多服务由守护进程提供,但情况并非总是如此。例如,服务gdm
(默认登录管理器)由并非真正守护进程的进程提供(它有一个用户界面供您输入密码)。诸如console-setup
、mountall
或networking
(以 为例/etc/init
)之类的服务不是由持续运行的进程提供的,而是通过运行一些状态更改命令来启用和禁用的。
另一个相关的概念是服务器。服务器是一个监听来自其他程序的连接的程序。(连接可能通过网络或各种本地通信方式进行。)许多服务器都是守护进程,但短暂存在的程序可以是服务器,而不会被视为守护进程;具有用户界面的程序也不会被视为守护进程。例如,Emacs 编辑器可以运行一个服务器,该服务器监听外部打开文件的请求(即,emacsclient myfile
通过联系其关联进程在正在运行的 Emacs 实例中打开文件emascsserver
);Emacs 可以以守护进程模式启动,这意味着服务器已启动但没有 GUI(打开文件时会打开一个窗口)。延伸一下,服务器计算机是主要用于运行服务器程序的计算机。