合理管理进程让其成为Unix系统的守护神

Unix系统中的进程指的是一个具有特定功能的程序,它可以和其他程序共享对某个数据集合的操作。进程被应用程序创建之后,在获得资源时运行。如果得不到资源,就暂时停止直到获得其所需要的资源。进程完成后消忙。故进程与普通程序仍然有所差别。因为进程是动态的,而程序是静态的概念。不过笔者觉得这些描述都不怎么直观。笔者平时在跟大家交流过程中,都把Unxi进程比喻为系统的守护神。他负责与系统CPU之间进行通信并保障系统的正常运行。

  虽然进程是应用软件自动产生的。但是系统工程师在必要的时候仍然要学会对系统进程进行调整。如把某些运行时间比较久的进程放入到后台运行等等。笔者这里就进程管理这个话题,跟大家分享一下自己在这方面的管理经验。

  一、如何查看进程标识?

  进程创建之后,系统就会为其分配一个唯一的标识。进程表示的允许范围是从0到65535的十进制数字。通常情况下,进程标识是循环使用的。如果进程标识达到上界的话,将重新使用比较小的进程号。进程号在系统中的分配原则是必须唯一。所以即使是同一个应用程序发起的进程,发起时间不同其进程号也不同。但是关于进程的很多操作,都是针对进程号来进行的。如要把后台的进程调到前台来或者人工杀死一个不用的进程,都需要知道进程标识。故在进程管理中,系统工程师首先要掌握的一个内容就是如何查看系统的进程号。

  在Unix系统中,可以使用ps –ef命令来查看系统中的所有进程。输入这个命令后,系统会显示当前系统中进程的详细信息。具体来说,会包括如下内容。如UID表示这个进程的所有者;PID表示进程的标识;PPID表示父进程的标识;TTY表示运行进程的终端;COMMMAND表示创建进程的系统命令。

  作为一个合格的Unix系统工程师,要能够从这些信息中得到以下有用的结论。

  一是子进程与父进程的关系。每个进程都只有一个父进程,但是可以有多个子进程。创建其他进程的进程被称为父进程;而这个被创建的进程就是子进程。为什么要区分父子进程呢?如现在系统有三个进程,进程号分别为1001,1002,1003。而进程1003是有进程1001创建的。也就是说进程1001是进程1003所创建的。此时如果由于某种原因手工杀死父进程1001的话,那么它的子进程也会被同时杀死或者说成为“孤儿进程”。为此系统工程师在手工杀死进程的时候,需要先判断一下这个进程是否还创建了其他子进程。只有在确定这些子进程的手工关闭不会对系统产生不利影响之后,系统工程师才能够杀死父进程。而父进程与子进程的明显区别就在于进程标示号(PID)与父进程标识号(PPID)。如果子进程创建成功,则系统fork进程会将子进程的PID传给父进程。故系统工程师要能够根据进程标识号与父进程标识号来判断谁是谁的父进程;在手工关闭父进程时要注意其创建的子进程对系统是否会产生不利影响。

  二是系统创建的进程不能够被手工关闭。在Unix系统启动的时候,系统核心将创建sched进程。然后这个进程又会产生三个子进程,分别为init进程、vhard进程和bdflush进程。这个四个进程的进程标示好分别为0、1、2、3。在核心调度程序为他们分配CPU时间之前,shced把其他程序调度内存。这里Unix系统工程师需要注意的是,不要去尝试着维护这四个进程,如不要想把这个四个进程强制关闭掉。否则的话,工程师会吃不了兜着走。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/28714.html