进程的定义:一个进程是一个程序的一次执行的过程,程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合,进程是一个动态的概念。 一、 Linux进程概念 Linux 进程中最知名的属性就是它的进程号(Process Idenity Number,PID)和它的父进程号(parent process ID,PPID)。PID、PPID都是非零正整数。一个PID唯一地标识一个进程。一个进程创建新进程称为创建了子进程(child process)。相反地,创建子进程的进程称为父进程。 所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫做init进程。是内核自举后 第一个启动的进程。init进程作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参 照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们 的父进程。 Linux进程在运行中的三种状态: 执行(Running)状态:CPU正在执行,即进程正在占用CPU。l 就绪(Waiting)状态:进程已经具备的执行的一切条件,正在等待分配CPU处理时间。l 停止(Stoped)状态:进程不能使用CPU。l 理解Linux下进程的结构: Linux中一个进程在内存里有三部份的数据,就是"数据段","堆栈段"和"代码段",基于I386兼容的中央处理器,都有上述三种段寄存器,以方便操作系统的运行。见图1。
代码段,是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。而数据段则存放程序的全局变量,常数以及动 态数据分配的数据空间。堆栈段存放的就是子程序的返回地址、子程序的参数以及程序的局部变量。堆栈段包括进程控制块PCB(Process Control Block)中。PCB处于进程核心堆栈的底部,不需要额外分配空间。 Linux进程的种类 : Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。 交互进程--由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。l 批处理进程--这种进程和终端没有联系,是一个进程序列。l 监控进程(也称守护进程)--Linux系统启动时启动的进程,并在后台运行。l
二、linux服务器进程的监控 1.基本进程查看命令:ps Linux系统提供了ps、top等察看进程信息的系统调用,通过结合使用这些系统调用,我们可以清晰地了解进程的运行状态以及存活情况,从而采取相应的 措施,来确保Linux系统的性能。它们是目前在Linux下最常见的进程状况查看工具,是随 Linux版本发行的,安装好系统之后,用户就可以使用。 这里以ps命令为例,ps命令是最基本同时也是非常强大的进程查看命令。利用它可以确定有哪些进程正在运行及运行的状态、进程是否结束、进程有没有僵死、 哪些进程占用了过多的资源等。ps命令可以监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,如果需要检测其情况, 可以使用使用ps -el命令。图2是ps-el|more命令输出的例子。 图2 ps -el命令显示的进程信息 图2第二行主要信息见表1。 表1 ps输出详解 2.查看linux进程树命令:pstree pstree命令用ASCII字符显示树状结构,清晰地表达了程序间的相互关系。如果不指定程序识别码或用户名称,则会把系统启动时的第一个程序视为基 层,并显示之后的所有程序;若指定用户名称,便会以隶属该用户的第一个程序当作基层,然后显示该用户的所有程序。 主要参数: -a:显示每个程序的完整指令,包含路径、参数或常驻服务的标志。 -c:不使用精简标志。 -G:使用VT100终端机的列绘图字符。 -h:列出树状图时,特别标明现在执行的程序。 -H<程序识别码>:此参数的效果和指定“-h”参数类似,但特别标明指定的程序。 -l:采用长列格式显示树状图。 -n:用程序识别码排序,默认是以程序名称来排序。 -p:显示程序识别码。 -u:显示用户名称。 -U:使用UTF-8列绘图字符。 -V:显示版本信息。 在命令行输入“pstree -l”,如图3所示。 图3 pstree命令输出 可以看到init是系统的第一个进程,所有子进程的父进程。init通过解析/etc/inittab并参照默认或设定的运行级运行/etc/rc.d中的脚本。每个脚本可以启动或终止一个诸如网络、邮件、新闻或Web的服务。
三、Linux 服务器的进程的管理 Linux管理进程最好方法就是使用命令行下的系统命令。 1、启动进程 键入需要运行的程序的程序名,执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号(PID),用于系统识别和调度进 程。启动一个进程有两个主要途径∶手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。由用户输入命令,直接启动一个进程便是手工启动进程。 但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际结果也不一样。 (1) 前台启动 是手工启动一个进程的最常用的方式。一般地,用户键入一个命令"df",这就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于一个多进 程状态。有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。有的用户在键入"df"命令以后赶紧使用"ps -x"查看,却没有看到df进程,也觉得很奇怪。其实这是因为df这个进程结束太快,使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程, 例如在根命令下运行: find , 然后使用ps -aux查看,就会看到一个find进程在里面。 (2) 后台启动 直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于"瘫痪"状态,从后台启动这个进程是明智的选择。 2、进程调度 当需要中断一个前台进程的时候,通常是使用Ctrl+c组合键;但是对于一个后台进程就不是一个组合键所能解决的了,这时就必须使用kill命令.该命令 可以终止后台进程.至于终止后台进程的原因很多,或许是该进程占用的CPU时间过多;或许是该进程已经挂死.这种情况是经常发生的。Kill命令的工作原 理是:向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。 除了kill外Linux下面的进程涉及到的命令还有:at :at命令在指定时刻执行指定的命令序列;cron:cron命令用来完成重复的工作;crontab命令:crontab命令用于安装、删除或者列出用 于驱动cron后台进程的任务表。ps:ps命令主要查看系统中的进程;top命令:top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他 状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。nice:nice命令是进程按用户指定的优先级运行。renice: renice命令用来改变正在运行进程的优先级。另外不同发行版本的Linux版本也提供了一些图形化的进程管理工具,笔者使用RHEL 5.0就包括, Ksysguard见图4。 Ksysguard是KDE的系统监视、进程管理程序(Win 2003 的Ctrl+Alt+Del出现的就是类似这种功能的界面),允许用户从多种角度监测系统的运作状况。它还被设计成具有网络功能,监测对象也可以是网络上 的其它主机。启动Ksysguard的方法使用快捷键Ctrl+Esc可以弹出系统卫士。或者在命令行输入:KsysGuard。Kysygride同样 可以终止进程。