Systemd简介和特点
systemd的目标是:尽可能启动更少的进程、尽可能将更多的进程并行启动
设计点1:
对于传统的SysV init,假如要启动7个服务,那么这7个启动服务是有先后顺序的,也就是串行启动,串行启动的原因可能是某些服务依赖于另一些服务,那么被的服务将会被先启动,但是并不是所有的服务都相关联,于是有些服务之间其实可以是并行启动的。
对于upstart,对于有依赖性的服务可以按先后顺序启动,而对于不存在依赖关系的服务则可以并行启动,且UpStart 采用事件驱动机制,服务可以暂不启动,当需要的时候才通过事件触发其启动。
不过systemd能够更进一步提高并发性,即使对于upstart而言存在依赖性必须先后启动的服务(难道upstart人物存在依赖儿systemd是认为不存在的?那systemd是否也存在先后执行的任务);systemd可以提供按需启动的能力,只有某个服务被真正请求时再启动,当服务结束时,systemd可以关闭它。
设计点2:
关闭一个服务比启动一个服务更难,最初启动服务可能只是exec一个程序,而对于某个服务守护进程而言,其可能派生很多的子进程去执行各个任务,例如httpd、sshd等服务。一个init程序的一个重要职责就是管理跟踪和管理服务进程的生命周期。
为了处理这些问题,Upstart通过strike来跟踪fork、exit等系统调用。
systems则使用linux内核提供的CGroup来完成跟跟踪的任务,当停止服务时,systemd会通过查询CGoups,找到所有同属于一个CGroup的相关进程,而干净利落的停止这些进程。
设计点3: