查看进程

程序是为了完成某种任务而设计的软件,比如拷贝命令“ cp ”就是程序,文
本编辑工具
vi 也是一个程序。 而一个运行中的程序就被称为进程。
进程的一个比较正式的定义是:在自身的虚拟地址空间运行的一个单独的程
序。进程与程序是有区别的,进程不是程序,虽然它由程序产生。程序只是一个
静态的指令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、
动态的、使用系统运行资源的程序。
一个运行着的程序,可能包含多个进程。比如宁波城市职业技术学院的网站
(www.nbcc.cn) 用的 WWW 服务器是 Apache 服务器,当管理员启动服务后,可
能会有好多人来访问,也就是说许多用户来同时请求
httpd 服务, Apache 服务
器将会创建有多个
httpd 进程来对其进行服务。
在本教程中, 我们讨论进程的时候, 我们不关心这些进程究竟是如何运作,
或者是内核如何管理分配时间片的,我们所关心的是如何去控制这些进程,让它
们能够很好地为用户服务。
进程分类
进程一般分为交互进程、批处理进程和守护进程三类。 上述三种进程各有各
的作用,使用场合也有所不同。
交互进程:由一个 shell 启动的进程。交互进程既可以在前台运行,也可以
在后台运行。
批处理进程:这种进程和终端没有联系,是一个进程序列。
守护进程: Linux 系统启动时启动的进程,并在后台运行。
值得一提的是守护进程总是活跃的,一般是后台运行,守护进程一般是由系
统在开机时通过一个叫做
init 的脚本自动激活启动或超级管理用户 root 来启动。
由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。比
如, 无论我们是不是访问
www.nbcc.cn , 该主机上的 Apache 服务器 ( 进程名叫
httpd) 都在运行,等待着用户来访问,也就是等待着任务处理。
进程的描述符
进程描述符(
Process Descriptor ),顾名思义,就是进程的描述,即用来描
述进程的数据结构,可以理解为进程的属性。比如进程的状态、进程的标识(
PID
等。
表 错误 ! 文档中没有指定样式的文字。 -1
USER 启动进程用户
PID 进程标志号
PPID 父进程的 ID,父子进程的关系是管理和被管理的关系,当父进
程终止时,子进程也随之而终止。但子进程终止,父进程并不一
定终止。
%CPU 运行该进程占用 CPU 的时间与该进程总的运行时间的比例
%MEM 该进程占用内存和总内存的比例
VSZ 占用的虚拟内存大小
RSS 进程占用的物理内存值
TTY 进程建立时所对应的终端,“?”表示该进程不占用终端
STAT 进程的状态, 状态分为


D,不可中断的睡眠;
R,就绪(在可运行队列中);
S,睡眠;
T,被跟踪或停止;
Z,终止(僵死)的进程
W,没有足够的内存分页可分配;
< 高优先序的进程;
N,低优先序的进程;
L,有内存分页分配并锁在内存体内(实时系统或 I/O)。
+ 位于后台的进程
s 进程的领导者(在它之下有子进程);
START 为进程开始时间
TIME 为执行的时间
COMMAND 是对应的命令名

要对进程进行监测和控制,首先需要查看当前进程。 ps 命令就是最常用、也
是相当强大的进程查看命令。根据显示的信息可以确定哪个进程正在运行、哪个
进程被挂起、进程已运行了多久、进程正在使用的资源、进程的相对优先级,以
及进程的标志号(
PID )。所有这些信息对用户都很有用,对于系统管理员来说更
为重要。
我们在这里建立一个如下特殊的脚本文件作为例子:
#! /bin/bash
# filename bad.sh
endless_loop()
{
echo -ne "i=0;
while true
do
i=i+100;
i=100
done" | /bin/bash &
}
if [ $# != 1 ] ; then
echo "
请根据你主机 CPU( 核心 ) 个数输入一个整数: $0 <CPUs>"
exit 1;
fi
for i in `seq $1`
do
endless_loop
pid_array[$i]=$! ;

done
如果主机有多颗 CPU 或者 CPU 有多个核心,可以选择消耗多颗 CPU (核
心) 的计算资源。 使用方法很简单, 如可以输入“
./bad.sh 8 ”来运行这个脚本,
其中参数
8 表示消耗 8 CPU 的资源。
因为我们机器中的
CPU 是双核心,所以我们输入“ ./bad.sh 2 ” 来模拟这个
恶意占用
CPU 的程序,执行了这个程序后,我们主机 CPU 就被大量占用,如
我们前面所说的,如果主机是个服务器,用户就会发现服务器的相应速度明显下
降甚至不响应了。那么这时我们就要干预一下了,首先我们要找出“罪魁祸首”
也就是找出哪些进程在不正常地大量占用
CPU
下面我们就使用“
ps aux --sort -%cpu ”命令来获得主机上当前所有进程的
信息,并将输出按照 “
%CPU ”这个字段值降序排列:
[root@localhost ~]# ps aux --sort -%cpu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME
COMMAND
root 5066 99.8 0.0 106088 1164 pts/0 R Jan11 53:23 /bin/bash
root 5068 99.7 0.0 106088 1160 pts/0 R Jan11 53:20 /bin/bash
root 12 0.1 0.0 0 0 ? S Jan11 0:37 [events/1]
root 1425 0.1 0.2 185276 4360 ? Sl Jan11 0:34 /usr/sbin/vmtoo
root 1 0.0 0.0 19352 1556 ? Ss Jan11 0:01 /sbin/init
……
此处省略若干行
显示的每一行均代表一个进程, 每行都有 11 个字段,每个字段均为进程的
一个属性(在知识点
1 中有详细说明),我们要关心的是三个字段, 第三个字段
%CPU ”、 第八个字段“ STAT ” 和第十个字段“ TIME ”, “ %CPU ”表示的是
进程占用的
CPU 百分比, 我们可以看到这两个进程几乎占用全部 CPU ,由于我
们输出按照 “
%CPU ”这个字段值降序排列,因此这两个进程排在输出的头两
位;并且由“
STAT ”可以得知,这两个进程正在运行中,而由“ TIME ”可以得
知这两个进程已经运行了
50 分钟了。显然这两个进程正是我们要找的“罪魁祸
首”。
接下来我们再给出一些
ps 命令的用法示例。 ps 命令经常与 grep 命令一起
命令
用法: ps [选项]
查看系统中进程的状态
l 长格式输出;
u 按用户名和启动时间的顺序来显示进程;
j 用任务格式来显示进程;
f 用树形格式来显示进程;
a 显示所有用户的所有进程(包括其它用户);
x 显示无控制终端的进程;
r 显示运行中的进程;
--sort [+|-] 字段名 按指定字段对 ps 输出进行排序, +表示升序, -
示降序, “
+”字符是可选的,因为默认按升序排列
特别注意,
ps 的选项是不带连字符“-”的。


使用来查找特定的进程,如在错误 ! 未找到引用源。 中我们用 ps 命令和 grep
令来查找名称中能带有
sshd 字样的进程。
[root@localhost ~]# ps aux|grep sshd
root 2032 0.0 0.0 64068 1184 ? Ss 15:03 0:00 /usr/sbin/sshd
root 2502 0.0 0.2 97812 3904 ? Ss 15:04 0:00 sshd: root@pts/0
root 2563 0.0 0.0 103252 848 pts/0 S+ 15:10 0:00 grep sshd
[root@localhost ~]#
我们还可以用 ps 命令的 -f 选项来查看进程间的“父子”关系(在知识点 1
有详细说明)。
[root@localhost ~]# ps afux|grep sshd
root 2032 0.0 0.0 64068 1184 ? Ss 15:03 0:00 /usr/sbin/sshd
root 2502 0.0 0.2 97812 3904 ? Ss 15:04 0:00 \_ sshd: root@pts/0
root 2567 0.0 0.0 103248 836 pts/0 S+ 15:12 0:00 \_ grep sshd
[root@localhost ~]#
除了 ps 命令外, Linux 还提供了一个另外一个监视系统进程的工具 top,
ps 不同之处在于, top 是动态监视系统进程的工具, 在默认情况下, top 命令每
3 秒钟刷新一次。 接下来我们就用 top 来查看一下当前系统进程运行情况,注意
到总的
CPU 的使用率和两个特殊进程的 CPU 占用率:
命令序列 错误 ! 文档中没有指定样式的文字。 -1
top - 14:16:32 up 9:12, 1 user, load average: 2.00, 2.00, 1.93
Tasks: 132 total, 3 running, 129 sleeping, 0 stopped, 0 zombie
Cpu(s):
99.5%us , 0.5%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1922636k total, 364500k used, 1558136k free, 46876k buffers
Swap: 2097144k total, 0k used, 2097144k free, 125040k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5066 root 20 0 103m 1164 1008 R 99.8 0.1 75:09.72 bash
5068 root 20 0 103m 1160 1008 R 99.8 0.1 75:04.66 bash
12 root 20 0 0 0 0 S 0.3 0.0 0:38.64 events/1
5606 root 20 0 15032 1232 940 R 0.3 0.1 0:00.12 top
5609 root 20 0 106m 2336 1372 S 0.3 0.1 0:00.01 dhclient-script
1 root 20 0 19352 1556 1244 S 0.0 0.1 0:01.85 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
……
此处省略若干行
命令
用法: top [选项]
动态查看系统中进程的状态
-d:指定更新的间隔,以秒为单位。
-q:没有任何延迟的更新。如果使用者有超级用户,则 top 命令将会
以最高的优先序执行。


-c:显示进程完整的路径与名称。
还可以使用快捷键与
top 命令进行交互,常用的快捷键包括:
space 立即更新
> 向下翻页
< 向上翻页
T 按进程运行时间进行排序,降序
M 按内存占用情况排序,降序
N 以进程 ID 排序,降序
P CPU 占用情况排序, 降序(默认)
R 反向排序
k 结束指定进程




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值