字:
关灯 护眼

第21节

章节出错了,点此刷新,刷新后小编会在两分钟内校正章节内容,请稍后再试。
Linux顺理成章的代替Hurd成为了GNU计划中那个自由系统的内核。而这个系统,也被叫做GNU/Linux系统。Stallman理想中的自由世界,终于拉开了那沉重的幕布,展现出了自由的光彩。而Stallman并不满足,也确实没有满足的理由,这个自由的世界还需要成长,还需要更加丰富多彩,还需要有更多的人走进这个世界中来。于是Stallman奔走于世界各地,告诉人们有这么一个自由的世界,号召人们加入这个世界,鼓励人们为这个世界更加自由而付出自己的力量。他是一个执着的苦行僧,为了他的梦想,为了他的自由世界,他会一直走下去……
  
  
  日期:2009-10-2814:38:27
  
  (56)进程
  为了能够创作出更好的Rubbish系列程序,主人决定好好充电了。他下了个pdf版的书来看,好象是关于c语言编程的。看pdf这事儿,得找Evince来。Evince是个文档查看器,比人家Adobe官方的pdf阅读器小巧很多,用起来也很方便。而且每次主人看完一个文档,点关闭的时候,他都会很有心得记录下主人看到的页数,下次再打开同一个文档时,他就直接替主人翻到上次那页。这个很贴心的举动然主人很满意。这次也是,主人一点击那个文档,Evince就赶快去查自己的记录,一看,哦,这个文档看到了380页,"进程"这一章,赶快翻到。
  
  有人可能对进程这个名字还不是很明白,什么是进程呢?简单地说,进程就是正在干活的软件。比如Evince,躺在硬盘里睡觉的时候他就是一个软件,一堆数据,一陀代码。当他被叫醒,跑进内存里开始干活的时候,他就是一个进程了。(当然,其实这么说不很准确)换句话说,内存里忙忙碌碌的,都是一个个的进程。当然,同时他们都是程序,都是软件,这个不冲突。就像去公司上班的人,他们都是人(废话,见过大马哈鱼上班么),当他们在公司工作的时候,他们都是公司的员工。员工,就像进程一样。很多公司的员工每个人都有个工号,什么NB001,SB999之类的,每个进程也都有一个唯一的标识——进程ID号,简称PID。这个ID号是由我分配给每一个跑进工作间的进程的,分配的规则很简单,每人一个,每次加一。第一个跑进来的就是1号,上面介绍过,Init这家伙每次都是第一个被我叫起来,帮我打理一下日常工作,所以他的ID号总是1。而且,他还有个特殊身份,这个呢,咱暂时保密,待会再说。
  
  每个公司的员工都有个直属的上级,上级又有上级,以此类推。我们这里的进程也是这样,只不过我们不叫”上级“或者“上司”,我们叫——爹!好吧,似乎这个称谓土了点,但是意思就是这个意思。一个进程之所以成为一个进程,一定是由于另一个进程创建了他。(有点绕嘴吧)比如说主人来了一个终端,于是就有了一个bash进程,然后主人在这个终端里敲入firefox然后回车,bash就知道这是要他去叫狐狸妹妹来干活,于是bash就去找狐狸妹妹,把她带到内存里开始工作,于是就创建了一个firefox进程。好了,现在,firefox这个进程是由bash这个进程创建的,那么,bash这个进程就是firefox这个进程的父进程,firefox进程就是bash进程的子进程,也就是说,狐狸妹妹就得管bash叫爹!那bash也得有个“爹”吧?是的,如果是在Gnome环境下开的那个终端的话,那么bash它爹就是调用bash的gnome-terminal。那么如此循环往复,肯定有一个站在金字塔最高点的总"爹"吧?难道,难道笨兔兔你就是他们的总爹?很遗憾,我不是,所有进程的总爹,是每次启动第一个被我叫起来的Init,所有的进程都是被init直接或者间接创建的,Init才是所有进程的祖宗!
  
  
  日期:2009-10-2914:07:53
  
  (57)僵尸
  关于父进程,有两点要说明:
  第一,我们这的父子关系不是固定的,是会变换的。如果从bash启动firefox那bash就是firefox的爹,如果直接从图形界面启动那就没bash什么事情了。(这时候firefox的爹其实是init)
  第二,不要问我哪里有妈进程!
  当爹也有当爹的义务,人家不能白叫你一声爹是不是。当自己的娃(也就是子进程啦)做完自己该做的工作以后,就停止了一切动作,像个死尸一样待在那里,当爹的就负责给他“收尸”-_-b一个结束了所有工作的进程,会处于一种“僵尸”状态,这时候他什么也不做了,就等着被干掉。进程进入僵尸状态前一般会通知他爹一声,汇报一下说:爹啊,俺已经把该做的都做啦,现在我要变僵尸啦!(让后平举双手开始行走?那是生化危机!)然后他爹负责向我汇报:我家娃干完活了,你把他的工号(就是PID,记得吧)取消掉然后让他回去睡觉吧。然后我就把它的工号收回,然后看看他有没有什么申请了没释放的资源(一般一个好孩子在结束运行成为僵尸之前会主动释放掉自己申请的资源的。),确认都没问题了之后,他就被从我的进程列表中清除了。但是有时候也会有些特殊情况,比如有的时候娃还在兢兢业业的干活呢,结果他爹死了。(可能他爹干完活退出了,也可能被主人用命令kill了。)这个时候我就会发个信号给他家娃说:那个……娃呀,那啥,跟你说个事,你爹死了。这时候有的娃就悲痛欲绝:俺爹都死了俺活着还有啥意思啊,呜呜呜~~~俺也僵尸吧。然后就退出了。比如你在终端运行firefox,然后把终端关了,firefox也就退出了。也有的娃比较坚强,一定要完成上级交给的任务,化悲痛为力量,这时候我会给他找个新爹——因为每个进程总得有个父进程,没爹是不行的。一般我会安排他爹的爹来当他的爹(又绕进入了吧),也就是这个进程原来的"爷爷"进程来当他的父进程。然后这娃在长了一辈后,继续认真工作。比如你在终端运行nohupfirefox,然后把终端关了,firefox继续运行。那如果他爷爷不幸也挂了呢?那就继续往上导吧,我们说了Init是所有进程的祖宗,所以他那里成了最终的“无依靠青年进程收容所”。
  
  还有的时候娃已经把该做的事情做完了,汇报给他爹并变成僵尸。可是他爹还没来得及给自己娃收尸,自己就挂掉了。这个时候,我没法通知那娃说她爹挂了,因为那娃已经是僵尸了,啥也不听啥也不干了。可我也不能直接把他干掉,啥事情都得按规矩来嘛,只有他爹向我申请我才能把他干掉,可是他爹又已经挂了……那怎么办呢?那就按流程来,先给这个娃找个爹,哪怕这娃已经是僵尸了,也得有个爹。比如我找到init说:那个ID号是2725的那个进程爹死了,你当他爹吧。一边说一边看也不看的用手往那边一指,假装自己没看到那娃已经成僵尸了。一般Init也不会太注意,直接就答应了,然后马上发现了事情的真相,跑到我这里来说:那娃已经成了僵尸啦,你还叫我收养个啥?我肯定会一脸无辜装:啊?是啊,那不管怎样,你是他爹了,你负责处理一下后事吧。于是init只好以爹的身份处理那个僵尸的后事,问题就这样解决了。
  
  
  日期:2009-11-0417:21:50
  
  (58)State
  别看说的这么麻烦,其实一个天真烂漫的娃进程从变成僵尸到被干掉只是一瞬间的事情,所以一般情况下主人是看不到一个僵尸进程的,要不然这一屋子僵尸还不得把主人吓出点毛病来。一般主人用ps命令查看到的进程,和办公室里的员工差不多,基本都处于两种——干活和睡觉。
  
热门推荐
夜的命名术 吹神 夜的命名术 吹神