一个具有较好的安全性和稳定性的系统是用户所需要的。无论进行何种操作和业务处理,用户都希望系统始终处于安全、稳定的状态。因此,即时地进行系统的进程管理和系统监控工作是保证系统安全、稳定的状态。
进程的概念最早出现在20世纪60年代,此时操作系统已经进入多道程序设计的时代。程序的并发执行不仅提高了系统的执行效率,也带来了资源利用率的极大提高。与此同时,并发程序的执行,在操作系统中引入了进程的概念。
进程(process)通常被定义为可并发执行的、具有一定功能的程序段在给定数据集上的一次执行过程。简而言之,进程就是程序的一次运行过程。
进程具有以下几个基本特征:
进程在启动后不一定马上运行,因而进程存在很多种状态。从理论上讲,进程通常会在三种状态之间进行转换:运行态、就绪态、等待态(阻塞态):
具体到Linux系统中,进程所处的状态更为复杂多样,系统为每种状态都定义了一个符号,以便更好的标记:
为了描述和控制进程的运行,系统为每个进程定义了一个数据结构,该数据结构被称为进程控制块(PCB)。所谓系统创建一个进程,就是由系统为某个程序设置一个PCB,用于对该进程进行控制和管理。进程任务完成后,由系统收回PCB,该进程便小王。系统根据PCB来告知相应进程的存在,因此PCB是进程存在的唯一标志。
PCB中包含了进程的描述信息和控制信息。PCB的内同主要包括了描述信息、现场信息和控制及资源管理信息。
启动进程的过程即启动程序或者命令的过程。通常,程序和命令保存在磁盘上,当在命令行中输入一个可执行程序的文件名或者命令并按Enter键后,Linux系统内核就把该程序或者命令的相关代码加载到内存中并开始执行。系统会为该程序或者命令创建一个或者多个相关的进程,以完成程序或者命令规定的任务。
启动进程的方式分为前台方式和后台方式两种。
打开终端输入命令并按下Enter键,就以前台的方式启动了一个进程。例如,输入命令:
vi story
该命令就以前台的方式启动了一个进程,该进程专门负责执行vi编辑器程序。在该进程还未执行完时,可按Ctrl+Z
组合键将该进程暂时挂起,然后用ps
命令查看该进程的有关信息。ps
命令格式如下:
ps [选项]
常用的选项有:
选项 | 作用 | 选项 | 作用 |
---|---|---|---|
-e | 显示所有进程 | a | 显示所有终端的所有进程 |
-f | 以全格式显示所有的进程 | u | 以面向用户的格式显示多有的进程 |
-r | 只显示正在运行的进程 | x | 显示所有不占用终端的进程 |
-o | 以用户定义的格式显示所有进程 |
ps
命令默认只显示在本终端上运行的进程,除非指定了-e、a、x
等选项。当没有指定显示格式时,ps
命令采用默认格式,分PID、TTY、TIME、CMD4列显示,各列的含义如下:
列 | 含义 |
---|---|
PID | 进程标识号 |
TTY | 进程对应的终端,"?"标识该进程不占用终端 |
TIME | 进程累计使用的CPU时间 |
CMD | 进程执行的命令名 |
指定-f
选项时,采用全格式,分UID、PID、PPID、C、STIME、TTY、TIME、CMD8列显示进程。UID、PPID、C、STIME的含义如下:
列 | 含义 | 列 | 含义 |
---|---|---|---|
UID | 进程属主的用户名 | C | 进程最近使用的CPU时间 |
PPID | 父进程的标识号 | STIME | 进程开始时间 |
指定u
选项时,采用用户格式,分USER、PID、%CPU、%MEN、VSC、RSS、TTY、STAT、START、TIME、COMMAND11列显示进程,其中几列的含义如下:
列 | 含义 |
---|---|
USER | 同UID |
%CPU | 进程占用CPU的时间与进程总运行时间之比 |
%MEN | 进程占用内存与总内存之比 |
VSZ | 进程占用虚拟内存的大小,以KB为单位 |
RSS | 进程占用实际内存大小,以KB为单位 |
STAT | 进程当前状态,用字符表示。R为执行态,S为睡眠态,D为不可中断睡眠态,T为暂停态,Z为僵死态 |
START | 同STIME |
COMMAND | 同CMD |
在终端以后台方式启动进程,需要在执行的命令后面添加&符号。
vim song&
此时,执行jobs
命令还可以查看当前终端的后台进程:
终止进程是系统管理员协调系统资源利用率的有效手段。当某个进程已经僵死或占用大量CPU时,就需要终止该进程。
要终止该进程有以下两种方法。
Ctrl+C
可以终止一个前台执行的进程。如果想要终止后台执行态的进程,可以现使用fg
命令将该进程调至前台,再使用Ctrl+C
组合键终止它。
# 在1号终端执行
nohup nc -lp 8000 & # 在后台监听8000端口
# 在2号终端执行
netstat -antp | grep :8000 # 查看8000终端的进程PID
ps -ef | grep PID号
kill PID号 # 杀死进程
netstat -antp | grep :8000 # 再次查询这个进程已经没有
kill
命令的格式为:
kill [-信号] PID
kill命令通过向进程发出终止信号使其退出运行,kill发出的信号可以有多种,每个信号都有一个编号,其中默认使用的是15编号SIGTERM。若进程已经无法响应终止信号,那么可以发出9信号SIGKILL,强行将其终止,此时就需要"-9"选项。
例如:我们开启一个vim进程并将其挂载至后台,由于在没有正常保存退出的情况下,vim进程是不允许被随意结束的,所以此时不加任何选项的kill命令是无法将vim进程终止的。
vim test.txt # 编辑末行模式下不保存按Ctrl+Z将进程转入后台
jobs -l # 查看后台进程
kill PID号 # 单纯用kill命令无法结束
jobs -l # 进程仍然挂起
kill -9 PID号 # 强制杀死进程
jobs -l
在Linux系统总,多个进程可以并发执行。但如果系统中并发执行的进程数量过多,会造成系统的整体性能下降。因此,用户可以根据一定的原则,对系统中的进程进行调度,例如终止进程、挂起进程、改变进程优先级等。
在Linux系统中,每个进程都有特定的优先级。系统在位进程分配CPU等资源时,是通过优先级来进行判断的。优先级高的进程可以优先执行。但是通过命令来改变某些进程的优先级。
ps -l
命令可以查看用户进程的优先级: 上图中,PRI和NI两列是与进程优先级有关的信息。PRI表示进程优先级,由操作系统动态计算,是进程的实际优先级。NI表示进程的请求优先级,它由进程拥有者或超级管理员进程设置,NI会影响到进程的实际优先级。
nice [选项] 命令
常用选项是-n
,n值表示请求优先级,n的取值范围为-20~19。n值越小,请求优先级越高。默认请求优先级为10。
默认情况下,只有root用户才能提高进程的请求优先级,普通用户只能降低进程的请求优先级。
nice -15 vi&
ps -l
renice [+/-n] [-g 命令名...] [-p 进程标识号] [-u 进程所有者]
ps -l
renice +10 -p 32621
ps -l
一个处于执行状态的进程被挂起时,会被系统自动转到后台,处于暂停状态;在合适的时候再被激活,恢复执行状态。
要挂起当前正在运行的前台进程,可通过Ctrl+Z
组合键来实现。要激活被挂起的进程,可以通过采用两种方式:fg
命令和bg
命令。
fg [参数]
参数为数字n,代表进程的序列号。
**示例:**在前台启动vi
编辑器进程,创建文档时,在命令模式下,按下Ctrl+Z组合键,挂起该进程,再使用fg
命令记过该进程,继续编写文档,最终退出vi
:
bg [参数]
参数为数字n,代表进程的序列号。
**示例:**使用find
命令启动一个前台执行的进程,查找文件名为passwd的文件。在find命令执行期间(即还未找到passwd文件时),按下Ctrl+Z组合键,挂起该进程,系统将其调度至后台,并显示:
然后再启动另一个前台执行的进程—vi编辑器。在命令模式下按Ctrl+Z组合键,挂起该进程。
数字5标识当前系统中有5个被挂起的进程,均在后台。
接着再使用bg
命令,将find
命令和vi
命令进程激活,并转至后台运行:
bg 4
bg 5
监视进程,即了解当前系统中进程的运行情况,例如,哪些进程正在运行,哪些进程已经结束,是否有僵死进程,进程占用资源的情况,等等。这些信息对系统的高校运行具有重要的意义。
通过top
命令可以监控系统的各种资源(包括内存、CPU)的利用率。该命令会定期更新显示内容,默认根据CPU的负载大小进行排序。top
命令时Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况,类似于Windows中的任务管理器。其语法格式如下:
top [-选项]
常用选项如下:
选项 | 作用 |
---|---|
c | 显示整个命令行 |
d | 指定没两次屏幕刷新之间的时间间隔。默认3s刷新一次 |
i | 不显示任何闲置或僵死的进程 |
n | 指定监控信息每秒的更新次数 |
p | 进程标识号列表 |
s | 使top民老公再安全模式下运行 |
S | 使用累计模式 |
执行top
命令后,结果会不断更新。如果想要终止该命令的执行,可以按q
退出;如果想看到以内存利用率排序的显示,可以按m
键;如果想看到以执行时间排序的显示,可以按t
键。top
命令交互按键及作用:
按键 | 作用 |
---|---|
h或者? | 显示帮助画面,给出一些简短的命令总结说明 |
k | 终止一个进程。系统将提示用户输入要终止的进程的PID,以及要发送给该进程的信号。一般的终止进程可以使用信号15;如果进程不能正常结束,就是用信号9强制结束该进程。默认值是信号15。在安全模式下此命令被屏蔽 |
i | 忽略/显示闲置和僵死进程。这是一个开关式命令 |
q | 退出程序 |
r | 重新安排一个进程的优先级。系统提示用户输入需要改变的进程的PID以及需要设置的进程的优先级。输入正值将使优先级降低,反之则使优先级提高。默认值是10。 |
S | 切换到累计模式 |
s | 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位是秒。如果有小数,就换算成毫秒。输入0则系统将不断刷新,默认值是5s.需要注意的是,如果设置的值太小,很可能会引起不断刷新,从而根本来不及看清显示的信息,而且系统负载也会大大增加 |
f/F | 从当前显示中添加或删除项目 |
o/O | 改变显示项目的顺序 |
l | 切换显示平均负载和启动时间信息 |
m | 切换显示内存信息 |
t | 切换显示进程和CPU状态信息 |
c | 切换显示命令名称和完整命令行 |
M | 按占用内存大小排序 |
P | 按占用CPU百分比排序 |
T | 按时间/累计时间排序 |
W | 将当前设置写入~/.toprc文件,这是修改top配置文件的推荐方法 |
日志文件(log file)是记录Linux系统运行情况及详细信息的文件。系统运行过程中的错误情况或问题都会被日志文件记录下来,例如用户登录以及其他安全相关的问题。系统日志文件为管理员用户了解系统状态,跟踪系统使用情况等提供了可靠的依据。
日志文件都在/var/log目录下,通过ls
命令可以查看该目录下的日志文件都有哪些:
用户可以使用文本编辑器打开某个日志文件并查看其内容。日志文件通常详细记录了程序的执行状态、时间、日期、主机等信息。通过日志文件可以获得系统运行的详细信息。
日志文件和子目录 | 说明 |
---|---|
/var/log/alternatives.log | 更新替代信息都记录在这个文件中 |
/var/log/apport.log | 应用程序崩溃记录(没有记录则没有该文件) |
/var/log/apt | 用apt-get安装卸载软件的信息 |
/var/log/auth.log | 登录认证日志 |
/var/log/boot.log | 包含系统启动信息的日志 |
/var/log/btmp | 巨鹿所有失败启动信息 |
/var/log/Consolekit | 记录控制台信息 |
/var/log/cpus | 设计所有打印信息的日志 |
/var/log/dist-upgrade | 记录dist-upgrade这种更新方式的信息 |
/var/log/dmesg | 包含内核缓冲信息。在系统启动时,显示屏幕上与硬件有关的信息 |
/var/log/dpkg.log | 包括安装或用dpkg命令清除软件包的日志 |
/var/log/faillog | 包含用户登录失败信息。错误登录命令也会记录在本文件中 |
/var/log/fontconfig.log | 与字体配置有关的日志文件 |
/var/log/fsck | 文件系统日志文件 |
/var/log/kern.log | 记录内核产生的日志,有助于在定制内核时解决问题 |
/var/log/lastlog | 记录所有用户的最近信息。这是一个二进制文件,因此需要用lastlog命令查看其内容 |
/var/log/mail/ | 这个子目录包含右键服务器的额外信息 |
/var/log/samba/ | 这个子目录包含samba存储信息 |
/var/log/wtmp | 记录每个用户详细的登录、注册等信息。使用wtmp命令可以发现谁追赠在登录系统,谁正在使用命令显示这个文件或信息等操作 |
/var/log/xorg.*.log | 来自*(如0、1)的日志信息 |
/varlog/dmesg文件
:这个日志文件记录了与启动Ubuntu有关的引导信息,包含内核缓冲信息。在系统启动时,显示屏幕上与硬件有关的信息。通过查看/var/log/dmesg文件,可以获知Linux系统能够检测出的硬件等信息。可以通过使用Gedit打开该文件,也可以通过在终端输入命令dmesg
命令打开它:/var/log/wtmp文件
:这是一个二进制文件,记录每个用户的登录次数和持续时间等信息。该文件记录了每个用户登录、注销及系统的启动、停机的时间。因此,随着系统正常运行时间的推移,该文件的大小也会越来越大,该日志文件增大的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录。我们可以使用文本编辑器或last
命令来打开该文件:last [-adRx] [-f] [-n] [用户名] [终端号]
选项 | 作用 |
---|---|
-a | 把登录系统时的主机名或IP地址显示在最后一行 |
-d | 将IP地址转换成主机名 |
-f | 指定记录文件 |
-n | 设置用户名的显示列数 |
-R | 不显示登录系统的主机名或IP地址 |
-x | 显示系统关机、重开机以及执行等级的改变等信息 |
Linux操作系统是一个典型的多用户、多终端系统,系统可能同时拥有多个用户,每个用户都有可能同时执行多个程序,而每个程序有可能启动多个进程。因此,从宏观和系统整体的角度出发,Linux系统资源将会分配给许许多多的进程使用。如果某些进程占用了大量的系统资源,就会造成系统负载过重、系统资源供不应求的局面。因此,系统管理员应该实时关注监控系统状态,了解系统资源的消耗情况,锁定消耗CPU资源最多的进程,以确保系统时刻处于较好的运行状态,保持较好的整体性能。
在Ubuntu系统中有两种方式可以启动系统监视器:
应用程序
图标,再找到系统监视器
图标,或在搜索中输入"system-monitor":gnamo-system-monitor
系统监视器窗口包含“进程”、“资源”、“文件系统”的标签页,其中“进程”标签页中显示进程的名称、用户、CPU占用率、进程ID、所占内存大小等信息。选中进程,鼠标右键可以改变进程的优先级、停止、启动等操作。
在“资源”选项卡中,可以查看CPU历史、内存和交换历史、网络历史等情况;在“文件系统”选项卡中,可以查看设备及其对应的目录、相应文件系统的类型、磁盘空间总计、可用磁盘空间的大小、易用磁盘空间的大小和空闲磁盘空间的大小等信息。
定期查看内存使用状况可以较好的掌握系统的运行情况。用户可以通过使用free
命令查看系统物理内存和交换分区的大小,以及已使用的、空闲的、共享的内存大小和缓存、高速缓存的大小等信息:
上述数据以MB为单位显示内存状况。
对文件系统进行监控是进行系统监控的重要组成部分。用户可以通过df
命令查看系统磁盘空间状况:
默认情况下,该工具以KB为单位显示分区的大小。如果要使系统以MB或GB为单位显示,可以使用df -h
: