浅谈 upstart 和 孤儿进程问题!!!

来源:互联网 发布:mac玩使命召唤 编辑:程序博客网 时间:2024/06/06 08:55

这是好久之前看的了,我那个时候就有一个问题没有弄清楚,现在总算是明白了一点点,总比没有明白强吧,

首先我得说一下我使用的系统 是 Ubuntu 14:04.5 X64 。

为什么要说一下系统呢,因为我的问题的出现就是根据系统而来的。


首先我想说一下孤儿进程,进程有很多,我都快忘记了,例如 僵尸进程,孤儿进程,父进程,子进程,等等。

在这里我想说的是孤儿进程:

首先说明一下孤儿进程的出现,在父进程结束的时候他创建出来的子进程没有结束,这个时候子进程没有了父亲

他就称为了孤儿,这个进程就是孤儿进程了,这样说的话应该能明白一点吧。


但是无论是什么进程都有死亡的时候,死亡就代表着要释放空间也就是资源,但是这个资源是需要一些进程回收的。

例如 :父进程中子进程死亡了,父进程就会回收子进程的资源,父进程死亡了,int进程就会回收他的资源,

但是如果父进程死亡了。子进程还没有死亡,这个时候是谁回收他的资源呢?


我的问题便是在这里开始的 :

我记得老说说过,父进程如果在子进程还没有回收之前就死亡了,他就会成为孤儿进程会被init进程收养。

在子进程死亡的时候init进程就会代替子进程的父进程把子进程的资源回收。


我一开始听的听明白的。但是我使用我的系统敲一遍这个过程,发现我的回收是不对的,为什么会出现这样的问题呢?我也在反思,我的代码思想是 :首先产生一个子进程,调用fork函数,这个函数的返回值不同进程判断代码是在父进程中还是在子进程中,在父进程中的代码让父进程立即死亡,而在子进程中的代码是让他先睡一会,之后再让他执行,最后给他一个无线循环,不让子进程死亡。子进程的死亡使用kill -9命令进程杀死。但是在子进程存在的时候我要看看子进程的父进程是谁,发现子进程的父进程ID != 1 这个是我最大的疑点,所以我重新敲打了一遍代码,发现还是这个问题,而且有时候这个ID还会变化。


后来我问别人发现是由于系统的原因,准确的说是内核的原因,这样的事情主要都是在Ubuntu 2006 年以后的版本中出现


我进而知道了 upstart 进程 :

这个进程的用处 :

  • 更快地启动系统
  • 当新硬件被发现时动态启动服务
  • 硬件被拔除时动态停止服务
我们都知道对于linux系统,一般都是运行在台式或者是大型机上的,在2006年左右的时候,有人就想把linux系统移植到笔记本上或者是移动平台上。但是有人发现sysvinit 并不适合在笔记本平台上使用,所以有人就开始着手开发upstart 了。

传统的 sysvinit 如果开启电脑,就会把所有服务进程开启,开机时间很长,就算没有这个外设设备,例如打印机,电脑没有连接打印机,但是我这个服务也要打开,在upstart上就不是这样的,如果没有这个外设设备我是不打开这个服务的,就好比我在电脑上插入一个U盘,之后电脑才会启动这个U盘服务。拔走这个U盘的时候这个服务也会停止。

这就提高了系统开机时间。我的Ubuntu就是这个样子的,而且他已经把sysvinit替换成了upstart

后来我使用进程树查看的时候就是这个道理 

pstree -ng ID




0 0
原创粉丝点击