linux第一个用户进程init--upstart

来源:互联网 发布:柳州有mac魅可专柜吗 编辑:程序博客网 时间:2024/06/02 15:52

大家在使用ubuntu时,会发现系统中没有文件 /etc/inittab,而这个文件 对于通过sysvinit来启动的系统是非常重要的文件,如果不存在可能会导致系统启动不起来,从这一点来看ubuntu应该是通过另外一种方式启动的系统了,这就是本文所要介绍的主题upstart。

upstart是一种基于事件通知机制启动相应服务的init进程。主要是为了解决sysvinit机制不能并行启动服务的问题。upstart最初只是为ubuntu系统开发的,现在已经可以在大多数的发布系统中取代sysvinit了。

目前在网上有很多文章介绍了upstart的用法,配置文件的写法,在这里就不再赘述,推荐大家看一下“浅析 Linux 初始化 init 系统,第 2 部分: UpStart”和“upstart getting-started”。


upstart为了保持与sysvinit的兼容性,对/etc/inittab文件也是可以处理的,并且默认运行级别为2并且执行rc相关的脚本。下面重点介绍一下upstart的配置文件路径以及upstart的启动顺序。

upstart启动过程如下图所示,摘至文章《浅析 Linux 初始化 init 系统,第 2 部分: UpStart》:


upstart配置文件路径在下面两个路径:

  1. /etc/init/            <==upstart的正式配置文件
  2. /etc/init.d/         <==sysvinit的配置文件,upstart为了兼容性也会执行这个路径下的脚本文件

upstart的事件是通过D-Bus来传输的。但是通过看upstart的启动配置文件中D-Bus也是通过upstart启动的,这就有一个矛盾了,就是在D-Bus启动之前,upstart的“startup”事件是怎么处理的。在网上搜索了一下,文章《upstart 分析》中解释的如下,感谢分享:
在init daemon 中需要监测某个进程的状态,例如存在repasw机制,监测getty进程是否退出,如果退出则需要再次启动getty以便用户登录。 为实现对事件的监测,要么采用轮询要么采用事件驱动的回调机制,upstart采用事件驱动机制。为实现基于事件驱动的机制,通常涉及跨进程调用,Upstart利用dbus来完成iPC通信。但upstart init daemon启动时dbus-daemon并没有运行,实际dbus-daemon是由upstart来启动。因此,upstart 采用  private D-bus 连接(unxi:address=/com/ubuntu/upstart)来实现IPC;其它进程(如telinit等)通过该连接来通知init daemon 产生某个事件。

0 0
原创粉丝点击